topology.sheaves.sheaf_condition.pairwise_intersections
⟷
Mathlib.Topology.Sheaves.SheafCondition.PairwiseIntersections
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,12 +3,12 @@ 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.Topology.Sheaves.SheafCondition.OpensLeCover
-import Mathbin.CategoryTheory.Limits.Final
-import Mathbin.CategoryTheory.Limits.Preserves.Basic
-import Mathbin.CategoryTheory.Category.Pairwise
-import Mathbin.CategoryTheory.Limits.Constructions.BinaryProducts
-import Mathbin.Algebra.Category.Ring.Constructions
+import Topology.Sheaves.SheafCondition.OpensLeCover
+import CategoryTheory.Limits.Final
+import CategoryTheory.Limits.Preserves.Basic
+import CategoryTheory.Category.Pairwise
+import CategoryTheory.Limits.Constructions.BinaryProducts
+import Algebra.Category.Ring.Constructions
#align_import topology.sheaves.sheaf_condition.pairwise_intersections from "leanprover-community/mathlib"@"0b7c740e25651db0ba63648fbae9f9d6f941e31b"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
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.sheaf_condition.pairwise_intersections
-! leanprover-community/mathlib commit 0b7c740e25651db0ba63648fbae9f9d6f941e31b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Topology.Sheaves.SheafCondition.OpensLeCover
import Mathbin.CategoryTheory.Limits.Final
@@ -15,6 +10,8 @@ import Mathbin.CategoryTheory.Category.Pairwise
import Mathbin.CategoryTheory.Limits.Constructions.BinaryProducts
import Mathbin.Algebra.Category.Ring.Constructions
+#align_import topology.sheaves.sheaf_condition.pairwise_intersections from "leanprover-community/mathlib"@"0b7c740e25651db0ba63648fbae9f9d6f941e31b"
+
/-!
# Equivalent formulations of the sheaf condition
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -104,6 +104,7 @@ def pairwiseToOpensLeCoverObj : Pairwise ι → OpensLeCover U
open CategoryTheory.Pairwise.Hom
+#print TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverMap /-
/-- Implementation detail:
the morphism level of `pairwise_to_opens_le_cover : pairwise ι ⥤ opens_le_cover U`
-/
@@ -114,7 +115,9 @@ def pairwiseToOpensLeCoverMap :
| _, _, left i j => homOfLE inf_le_left
| _, _, right i j => homOfLE inf_le_right
#align Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover_map TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverMap
+-/
+#print TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCover /-
/-- The category of single and double intersections of the `U i` maps into the category
of open sets below some `U i`.
-/
@@ -124,6 +127,7 @@ def pairwiseToOpensLeCover : Pairwise ι ⥤ OpensLeCover U
obj := pairwiseToOpensLeCoverObj U
map V W i := pairwiseToOpensLeCoverMap U i
#align Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCover
+-/
instance (V : OpensLeCover U) : Nonempty (StructuredArrow V (pairwiseToOpensLeCover U)) :=
⟨@StructuredArrow.mk _ _ _ _ _ (single V.index) _ V.hom_to_index⟩
@@ -224,6 +228,7 @@ instance : Functor.Final (pairwiseToOpensLeCover U) :=
right := left i' j' }⟩)
List.Chain.nil)))⟩
+#print TopCat.Presheaf.SheafCondition.pairwiseDiagramIso /-
/-- The diagram in `opens X` indexed by pairwise intersections from `U` is isomorphic
(in fact, equal) to the diagram factored through `opens_le_cover U`.
-/
@@ -232,7 +237,9 @@ def pairwiseDiagramIso : Pairwise.diagram U ≅ pairwiseToOpensLeCover U ⋙ ful
Hom := { app := by rintro (i | ⟨i, j⟩) <;> exact 𝟙 _ }
inv := { app := by rintro (i | ⟨i, j⟩) <;> exact 𝟙 _ }
#align Top.presheaf.sheaf_condition.pairwise_diagram_iso TopCat.Presheaf.SheafCondition.pairwiseDiagramIso
+-/
+#print TopCat.Presheaf.SheafCondition.pairwiseCoconeIso /-
/--
The cocone `pairwise.cocone U` with cocone point `supr U` over `pairwise.diagram U` is isomorphic
to the cocone `opens_le_cover_cocone U` (with the same cocone point)
@@ -244,6 +251,7 @@ def pairwiseCoconeIso :
((opensLeCoverCocone U).op.whisker (pairwiseToOpensLeCover U).op) :=
Cones.ext (Iso.refl _) (by tidy)
#align Top.presheaf.sheaf_condition.pairwise_cocone_iso TopCat.Presheaf.SheafCondition.pairwiseCoconeIso
+-/
end SheafCondition
@@ -319,6 +327,7 @@ variable (F : X.Sheaf C) (U V : Opens X)
open CategoryTheory.Limits
+#print TopCat.Sheaf.interUnionPullbackCone /-
/-- For a sheaf `F`, `F(U ⊔ V)` is the pullback of `F(U) ⟶ F(U ⊓ V)` and `F(V) ⟶ F(U ⊓ V)`.
This is the pullback cone. -/
def interUnionPullbackCone :
@@ -327,28 +336,36 @@ def interUnionPullbackCone :
PullbackCone.mk (F.1.map (homOfLE le_sup_left).op) (F.1.map (homOfLE le_sup_right).op)
(by rw [← F.1.map_comp, ← F.1.map_comp]; congr)
#align Top.sheaf.inter_union_pullback_cone TopCat.Sheaf.interUnionPullbackCone
+-/
+#print TopCat.Sheaf.interUnionPullbackCone_pt /-
@[simp]
theorem interUnionPullbackCone_pt : (interUnionPullbackCone F U V).pt = F.1.obj (op <| U ⊔ V) :=
rfl
#align Top.sheaf.inter_union_pullback_cone_X TopCat.Sheaf.interUnionPullbackCone_pt
+-/
+#print TopCat.Sheaf.interUnionPullbackCone_fst /-
@[simp]
theorem interUnionPullbackCone_fst :
(interUnionPullbackCone F U V).fst = F.1.map (homOfLE le_sup_left).op :=
rfl
#align Top.sheaf.inter_union_pullback_cone_fst TopCat.Sheaf.interUnionPullbackCone_fst
+-/
+#print TopCat.Sheaf.interUnionPullbackCone_snd /-
@[simp]
theorem interUnionPullbackCone_snd :
(interUnionPullbackCone F U V).snd = F.1.map (homOfLE le_sup_right).op :=
rfl
#align Top.sheaf.inter_union_pullback_cone_snd TopCat.Sheaf.interUnionPullbackCone_snd
+-/
variable
(s :
PullbackCone (F.1.map (homOfLE inf_le_left : U ⊓ V ⟶ _).op) (F.1.map (homOfLE inf_le_right).op))
+#print TopCat.Sheaf.interUnionPullbackConeLift /-
/-- (Implementation).
Every cone over `F(U) ⟶ F(U ⊓ V)` and `F(V) ⟶ F(U ⊓ V)` factors through `F(U ⊔ V)`.
-/
@@ -386,7 +403,9 @@ def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) :=
erw [← F.1.map_comp, ← F.1.map_comp]
convert s.condition.symm
#align Top.sheaf.inter_union_pullback_cone_lift TopCat.Sheaf.interUnionPullbackConeLift
+-/
+#print TopCat.Sheaf.interUnionPullbackConeLift_left /-
theorem interUnionPullbackConeLift_left :
interUnionPullbackConeLift F U V s ≫ F.1.map (homOfLE le_sup_left).op = s.fst :=
by
@@ -395,7 +414,9 @@ theorem interUnionPullbackConeLift_left :
(F.presheaf.is_sheaf_iff_is_sheaf_pairwise_intersections.mp F.2 _).some.fac _
(op <| pairwise.single (ULift.up walking_pair.left))
#align Top.sheaf.inter_union_pullback_cone_lift_left TopCat.Sheaf.interUnionPullbackConeLift_left
+-/
+#print TopCat.Sheaf.interUnionPullbackConeLift_right /-
theorem interUnionPullbackConeLift_right :
interUnionPullbackConeLift F U V s ≫ F.1.map (homOfLE le_sup_right).op = s.snd :=
by
@@ -404,7 +425,9 @@ theorem interUnionPullbackConeLift_right :
(F.presheaf.is_sheaf_iff_is_sheaf_pairwise_intersections.mp F.2 _).some.fac _
(op <| pairwise.single (ULift.up walking_pair.right))
#align Top.sheaf.inter_union_pullback_cone_lift_right TopCat.Sheaf.interUnionPullbackConeLift_right
+-/
+#print TopCat.Sheaf.isLimitPullbackCone /-
/-- For a sheaf `F`, `F(U ⊔ V)` is the pullback of `F(U) ⟶ F(U ⊓ V)` and `F(V) ⟶ F(U ⊓ V)`. -/
def isLimitPullbackCone : IsLimit (interUnionPullbackCone F U V) :=
by
@@ -445,7 +468,9 @@ def isLimitPullbackCone : IsLimit (interUnionPullbackCone F U V) :=
· convert h₂
apply inter_union_pullback_cone_lift_right
#align Top.sheaf.is_limit_pullback_cone TopCat.Sheaf.isLimitPullbackCone
+-/
+#print TopCat.Sheaf.isProductOfDisjoint /-
/-- If `U, V` are disjoint, then `F(U ⊔ V) = F(U) × F(V)`. -/
def isProductOfDisjoint (h : U ⊓ V = ⊥) :
IsLimit
@@ -453,13 +478,17 @@ def isProductOfDisjoint (h : U ⊓ V = ⊥) :
(F.1.map (homOfLE le_sup_right : _ ⟶ U ⊔ V).op)) :=
isProductOfIsTerminalIsPullback _ _ _ _ (F.isTerminalOfEqEmpty h) (isLimitPullbackCone F U V)
#align Top.sheaf.is_product_of_disjoint TopCat.Sheaf.isProductOfDisjoint
+-/
+#print TopCat.Sheaf.objSupIsoProdEqLocus /-
/-- `F(U ⊔ V)` is isomorphic to the `eq_locus` of the two maps `F(U) × F(V) ⟶ F(U ⊓ V)`. -/
def objSupIsoProdEqLocus {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) :
F.1.obj (op <| U ⊔ V) ≅ CommRingCat.of (RingHom.eqLocus _ _) :=
(F.isLimitPullbackCone U V).conePointUniqueUpToIso (CommRingCat.pullbackConeIsLimit _ _)
#align Top.sheaf.obj_sup_iso_prod_eq_locus TopCat.Sheaf.objSupIsoProdEqLocus
+-/
+#print TopCat.Sheaf.objSupIsoProdEqLocus_hom_fst /-
theorem objSupIsoProdEqLocus_hom_fst {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) (x) :
((F.objSupIsoProdEqLocus U V).Hom x).1.fst = F.1.map (homOfLE le_sup_left).op x :=
ConcreteCategory.congr_hom
@@ -467,7 +496,9 @@ theorem objSupIsoProdEqLocus_hom_fst {X : TopCat} (F : X.Sheaf CommRingCat) (U V
(CommRingCat.pullbackConeIsLimit _ _) WalkingCospan.left)
x
#align Top.sheaf.obj_sup_iso_prod_eq_locus_hom_fst TopCat.Sheaf.objSupIsoProdEqLocus_hom_fst
+-/
+#print TopCat.Sheaf.objSupIsoProdEqLocus_hom_snd /-
theorem objSupIsoProdEqLocus_hom_snd {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) (x) :
((F.objSupIsoProdEqLocus U V).Hom x).1.snd = F.1.map (homOfLE le_sup_right).op x :=
ConcreteCategory.congr_hom
@@ -475,7 +506,9 @@ theorem objSupIsoProdEqLocus_hom_snd {X : TopCat} (F : X.Sheaf CommRingCat) (U V
(CommRingCat.pullbackConeIsLimit _ _) WalkingCospan.right)
x
#align Top.sheaf.obj_sup_iso_prod_eq_locus_hom_snd TopCat.Sheaf.objSupIsoProdEqLocus_hom_snd
+-/
+#print TopCat.Sheaf.objSupIsoProdEqLocus_inv_fst /-
theorem objSupIsoProdEqLocus_inv_fst {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) (x) :
F.1.map (homOfLE le_sup_left).op ((F.objSupIsoProdEqLocus U V).inv x) = x.1.1 :=
ConcreteCategory.congr_hom
@@ -483,7 +516,9 @@ theorem objSupIsoProdEqLocus_inv_fst {X : TopCat} (F : X.Sheaf CommRingCat) (U V
(CommRingCat.pullbackConeIsLimit _ _) WalkingCospan.left)
x
#align Top.sheaf.obj_sup_iso_prod_eq_locus_inv_fst TopCat.Sheaf.objSupIsoProdEqLocus_inv_fst
+-/
+#print TopCat.Sheaf.objSupIsoProdEqLocus_inv_snd /-
theorem objSupIsoProdEqLocus_inv_snd {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) (x) :
F.1.map (homOfLE le_sup_right).op ((F.objSupIsoProdEqLocus U V).inv x) = x.1.2 :=
ConcreteCategory.congr_hom
@@ -491,6 +526,7 @@ theorem objSupIsoProdEqLocus_inv_snd {X : TopCat} (F : X.Sheaf CommRingCat) (U V
(CommRingCat.pullbackConeIsLimit _ _) WalkingCospan.right)
x
#align Top.sheaf.obj_sup_iso_prod_eq_locus_inv_snd TopCat.Sheaf.objSupIsoProdEqLocus_inv_snd
+-/
end TopCat.Sheaf
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -280,7 +280,6 @@ theorem isSheafOpensLeCover_iff_isSheafPairwiseIntersections :
(IsLimit.equivIsoLimit (Functor.mapConePostcomposeEquivalenceFunctor _).symm)
_ ≃ IsLimit (F.mapCone (Pairwise.cocone U).op) :=
IsLimit.equivIsoLimit ((Cones.functoriality _ _).mapIso (pairwiseCoconeIso U : _).symm)
-
#align Top.presheaf.is_sheaf_opens_le_cover_iff_is_sheaf_pairwise_intersections TopCat.Presheaf.isSheafOpensLeCover_iff_isSheafPairwiseIntersections
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -326,7 +326,7 @@ def interUnionPullbackCone :
PullbackCone (F.1.map (homOfLE inf_le_left : U ⊓ V ⟶ _).op)
(F.1.map (homOfLE inf_le_right).op) :=
PullbackCone.mk (F.1.map (homOfLE le_sup_left).op) (F.1.map (homOfLE le_sup_right).op)
- (by rw [← F.1.map_comp, ← F.1.map_comp]; congr )
+ (by rw [← F.1.map_comp, ← F.1.map_comp]; congr)
#align Top.sheaf.inter_union_pullback_cone TopCat.Sheaf.interUnionPullbackCone
@[simp]
@@ -361,9 +361,9 @@ def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) :=
rw [opens.coe_supr, Set.mem_iUnion]
constructor
· rintro (h | h)
- exacts[⟨⟨walking_pair.left⟩, h⟩, ⟨⟨walking_pair.right⟩, h⟩]
+ exacts [⟨⟨walking_pair.left⟩, h⟩, ⟨⟨walking_pair.right⟩, h⟩]
· rintro ⟨⟨_ | _⟩, h⟩
- exacts[Or.inl h, Or.inr h]
+ exacts [Or.inl h, Or.inr h]
refine'
(F.presheaf.is_sheaf_iff_is_sheaf_pairwise_intersections.mp F.2 ι).some.lift
⟨s.X,
@@ -372,7 +372,7 @@ def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) :=
F.1.map (eq_to_hom hι).op
· apply Opposite.rec'
rintro ((_ | _) | (_ | _))
- exacts[s.fst, s.snd, s.fst ≫ F.1.map (hom_of_le inf_le_left).op,
+ exacts [s.fst, s.snd, s.fst ≫ F.1.map (hom_of_le inf_le_left).op,
s.snd ≫ F.1.map (hom_of_le inf_le_left).op]
rintro i j f
induction i using Opposite.rec'
@@ -415,9 +415,9 @@ def isLimitPullbackCone : IsLimit (interUnionPullbackCone F U V) :=
rw [opens.coe_supr, Set.mem_iUnion]
constructor
· rintro (h | h)
- exacts[⟨⟨walking_pair.left⟩, h⟩, ⟨⟨walking_pair.right⟩, h⟩]
+ exacts [⟨⟨walking_pair.left⟩, h⟩, ⟨⟨walking_pair.right⟩, h⟩]
· rintro ⟨⟨_ | _⟩, h⟩
- exacts[Or.inl h, Or.inr h]
+ exacts [Or.inl h, Or.inr h]
apply pullback_cone.is_limit_aux'
intro s
use inter_union_pullback_cone_lift F U V s
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -104,12 +104,6 @@ def pairwiseToOpensLeCoverObj : Pairwise ι → OpensLeCover U
open CategoryTheory.Pairwise.Hom
-/- warning: Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover_map -> TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverMap is a dubious translation:
-lean 3 declaration is
- forall {X : TopCat.{u1}} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))) {V : CategoryTheory.Pairwise.{u1} ι} {W : CategoryTheory.Pairwise.{u1} ι}, (Quiver.Hom.{succ u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.Pairwise.CategoryTheory.category.{u1} ι))) V W) -> (Quiver.Hom.{succ u1, u1} (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (TopCat.Presheaf.SheafCondition.OpensLeCover.category.{u1} X ι U))) (TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverObj.{u1} X ι U V) (TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverObj.{u1} X ι U W))
-but is expected to have type
- forall {X : TopCat.{u1}} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) {V : CategoryTheory.Pairwise.{u1} ι} {W : CategoryTheory.Pairwise.{u1} ι}, (Quiver.Hom.{succ u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.Pairwise.instCategoryPairwise.{u1} ι))) V W) -> (Quiver.Hom.{succ u1, u1} (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (TopCat.Presheaf.SheafCondition.instCategoryOpensLeCover.{u1} X ι U))) (TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverObj.{u1} X ι U V) (TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverObj.{u1} X ι U W))
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover_map TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverMapₓ'. -/
/-- Implementation detail:
the morphism level of `pairwise_to_opens_le_cover : pairwise ι ⥤ opens_le_cover U`
-/
@@ -121,12 +115,6 @@ def pairwiseToOpensLeCoverMap :
| _, _, right i j => homOfLE inf_le_right
#align Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover_map TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverMap
-/- warning: Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover -> TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCover is a dubious translation:
-lean 3 declaration is
- forall {X : TopCat.{u1}} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))), CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.Pairwise.CategoryTheory.category.{u1} ι) (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (TopCat.Presheaf.SheafCondition.OpensLeCover.category.{u1} X ι U)
-but is expected to have type
- forall {X : TopCat.{u1}} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))), CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.Pairwise.instCategoryPairwise.{u1} ι) (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (TopCat.Presheaf.SheafCondition.instCategoryOpensLeCover.{u1} X ι U)
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverₓ'. -/
/-- The category of single and double intersections of the `U i` maps into the category
of open sets below some `U i`.
-/
@@ -236,9 +224,6 @@ instance : Functor.Final (pairwiseToOpensLeCover U) :=
right := left i' j' }⟩)
List.Chain.nil)))⟩
-/- warning: Top.presheaf.sheaf_condition.pairwise_diagram_iso -> TopCat.Presheaf.SheafCondition.pairwiseDiagramIso is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition.pairwise_diagram_iso TopCat.Presheaf.SheafCondition.pairwiseDiagramIsoₓ'. -/
/-- The diagram in `opens X` indexed by pairwise intersections from `U` is isomorphic
(in fact, equal) to the diagram factored through `opens_le_cover U`.
-/
@@ -248,9 +233,6 @@ def pairwiseDiagramIso : Pairwise.diagram U ≅ pairwiseToOpensLeCover U ⋙ ful
inv := { app := by rintro (i | ⟨i, j⟩) <;> exact 𝟙 _ }
#align Top.presheaf.sheaf_condition.pairwise_diagram_iso TopCat.Presheaf.SheafCondition.pairwiseDiagramIso
-/- warning: Top.presheaf.sheaf_condition.pairwise_cocone_iso -> TopCat.Presheaf.SheafCondition.pairwiseCoconeIso is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition.pairwise_cocone_iso TopCat.Presheaf.SheafCondition.pairwiseCoconeIsoₓ'. -/
/--
The cocone `pairwise.cocone U` with cocone point `supr U` over `pairwise.diagram U` is isomorphic
to the cocone `opens_le_cover_cocone U` (with the same cocone point)
@@ -338,9 +320,6 @@ variable (F : X.Sheaf C) (U V : Opens X)
open CategoryTheory.Limits
-/- warning: Top.sheaf.inter_union_pullback_cone -> TopCat.Sheaf.interUnionPullbackCone is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone TopCat.Sheaf.interUnionPullbackConeₓ'. -/
/-- For a sheaf `F`, `F(U ⊔ V)` is the pullback of `F(U) ⟶ F(U ⊓ V)` and `F(V) ⟶ F(U ⊓ V)`.
This is the pullback cone. -/
def interUnionPullbackCone :
@@ -350,26 +329,17 @@ def interUnionPullbackCone :
(by rw [← F.1.map_comp, ← F.1.map_comp]; congr )
#align Top.sheaf.inter_union_pullback_cone TopCat.Sheaf.interUnionPullbackCone
-/- warning: Top.sheaf.inter_union_pullback_cone_X -> TopCat.Sheaf.interUnionPullbackCone_pt is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone_X TopCat.Sheaf.interUnionPullbackCone_ptₓ'. -/
@[simp]
theorem interUnionPullbackCone_pt : (interUnionPullbackCone F U V).pt = F.1.obj (op <| U ⊔ V) :=
rfl
#align Top.sheaf.inter_union_pullback_cone_X TopCat.Sheaf.interUnionPullbackCone_pt
-/- warning: Top.sheaf.inter_union_pullback_cone_fst -> TopCat.Sheaf.interUnionPullbackCone_fst is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone_fst TopCat.Sheaf.interUnionPullbackCone_fstₓ'. -/
@[simp]
theorem interUnionPullbackCone_fst :
(interUnionPullbackCone F U V).fst = F.1.map (homOfLE le_sup_left).op :=
rfl
#align Top.sheaf.inter_union_pullback_cone_fst TopCat.Sheaf.interUnionPullbackCone_fst
-/- warning: Top.sheaf.inter_union_pullback_cone_snd -> TopCat.Sheaf.interUnionPullbackCone_snd is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone_snd TopCat.Sheaf.interUnionPullbackCone_sndₓ'. -/
@[simp]
theorem interUnionPullbackCone_snd :
(interUnionPullbackCone F U V).snd = F.1.map (homOfLE le_sup_right).op :=
@@ -380,9 +350,6 @@ variable
(s :
PullbackCone (F.1.map (homOfLE inf_le_left : U ⊓ V ⟶ _).op) (F.1.map (homOfLE inf_le_right).op))
-/- warning: Top.sheaf.inter_union_pullback_cone_lift -> TopCat.Sheaf.interUnionPullbackConeLift is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone_lift TopCat.Sheaf.interUnionPullbackConeLiftₓ'. -/
/-- (Implementation).
Every cone over `F(U) ⟶ F(U ⊓ V)` and `F(V) ⟶ F(U ⊓ V)` factors through `F(U ⊔ V)`.
-/
@@ -421,9 +388,6 @@ def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) :=
convert s.condition.symm
#align Top.sheaf.inter_union_pullback_cone_lift TopCat.Sheaf.interUnionPullbackConeLift
-/- warning: Top.sheaf.inter_union_pullback_cone_lift_left -> TopCat.Sheaf.interUnionPullbackConeLift_left is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone_lift_left TopCat.Sheaf.interUnionPullbackConeLift_leftₓ'. -/
theorem interUnionPullbackConeLift_left :
interUnionPullbackConeLift F U V s ≫ F.1.map (homOfLE le_sup_left).op = s.fst :=
by
@@ -433,9 +397,6 @@ theorem interUnionPullbackConeLift_left :
(op <| pairwise.single (ULift.up walking_pair.left))
#align Top.sheaf.inter_union_pullback_cone_lift_left TopCat.Sheaf.interUnionPullbackConeLift_left
-/- warning: Top.sheaf.inter_union_pullback_cone_lift_right -> TopCat.Sheaf.interUnionPullbackConeLift_right is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone_lift_right TopCat.Sheaf.interUnionPullbackConeLift_rightₓ'. -/
theorem interUnionPullbackConeLift_right :
interUnionPullbackConeLift F U V s ≫ F.1.map (homOfLE le_sup_right).op = s.snd :=
by
@@ -445,9 +406,6 @@ theorem interUnionPullbackConeLift_right :
(op <| pairwise.single (ULift.up walking_pair.right))
#align Top.sheaf.inter_union_pullback_cone_lift_right TopCat.Sheaf.interUnionPullbackConeLift_right
-/- warning: Top.sheaf.is_limit_pullback_cone -> TopCat.Sheaf.isLimitPullbackCone is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.is_limit_pullback_cone TopCat.Sheaf.isLimitPullbackConeₓ'. -/
/-- For a sheaf `F`, `F(U ⊔ V)` is the pullback of `F(U) ⟶ F(U ⊓ V)` and `F(V) ⟶ F(U ⊓ V)`. -/
def isLimitPullbackCone : IsLimit (interUnionPullbackCone F U V) :=
by
@@ -489,9 +447,6 @@ def isLimitPullbackCone : IsLimit (interUnionPullbackCone F U V) :=
apply inter_union_pullback_cone_lift_right
#align Top.sheaf.is_limit_pullback_cone TopCat.Sheaf.isLimitPullbackCone
-/- warning: Top.sheaf.is_product_of_disjoint -> TopCat.Sheaf.isProductOfDisjoint is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.is_product_of_disjoint TopCat.Sheaf.isProductOfDisjointₓ'. -/
/-- If `U, V` are disjoint, then `F(U ⊔ V) = F(U) × F(V)`. -/
def isProductOfDisjoint (h : U ⊓ V = ⊥) :
IsLimit
@@ -500,18 +455,12 @@ def isProductOfDisjoint (h : U ⊓ V = ⊥) :
isProductOfIsTerminalIsPullback _ _ _ _ (F.isTerminalOfEqEmpty h) (isLimitPullbackCone F U V)
#align Top.sheaf.is_product_of_disjoint TopCat.Sheaf.isProductOfDisjoint
-/- warning: Top.sheaf.obj_sup_iso_prod_eq_locus -> TopCat.Sheaf.objSupIsoProdEqLocus is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.obj_sup_iso_prod_eq_locus TopCat.Sheaf.objSupIsoProdEqLocusₓ'. -/
/-- `F(U ⊔ V)` is isomorphic to the `eq_locus` of the two maps `F(U) × F(V) ⟶ F(U ⊓ V)`. -/
def objSupIsoProdEqLocus {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) :
F.1.obj (op <| U ⊔ V) ≅ CommRingCat.of (RingHom.eqLocus _ _) :=
(F.isLimitPullbackCone U V).conePointUniqueUpToIso (CommRingCat.pullbackConeIsLimit _ _)
#align Top.sheaf.obj_sup_iso_prod_eq_locus TopCat.Sheaf.objSupIsoProdEqLocus
-/- warning: Top.sheaf.obj_sup_iso_prod_eq_locus_hom_fst -> TopCat.Sheaf.objSupIsoProdEqLocus_hom_fst is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.obj_sup_iso_prod_eq_locus_hom_fst TopCat.Sheaf.objSupIsoProdEqLocus_hom_fstₓ'. -/
theorem objSupIsoProdEqLocus_hom_fst {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) (x) :
((F.objSupIsoProdEqLocus U V).Hom x).1.fst = F.1.map (homOfLE le_sup_left).op x :=
ConcreteCategory.congr_hom
@@ -520,9 +469,6 @@ theorem objSupIsoProdEqLocus_hom_fst {X : TopCat} (F : X.Sheaf CommRingCat) (U V
x
#align Top.sheaf.obj_sup_iso_prod_eq_locus_hom_fst TopCat.Sheaf.objSupIsoProdEqLocus_hom_fst
-/- warning: Top.sheaf.obj_sup_iso_prod_eq_locus_hom_snd -> TopCat.Sheaf.objSupIsoProdEqLocus_hom_snd is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.obj_sup_iso_prod_eq_locus_hom_snd TopCat.Sheaf.objSupIsoProdEqLocus_hom_sndₓ'. -/
theorem objSupIsoProdEqLocus_hom_snd {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) (x) :
((F.objSupIsoProdEqLocus U V).Hom x).1.snd = F.1.map (homOfLE le_sup_right).op x :=
ConcreteCategory.congr_hom
@@ -531,9 +477,6 @@ theorem objSupIsoProdEqLocus_hom_snd {X : TopCat} (F : X.Sheaf CommRingCat) (U V
x
#align Top.sheaf.obj_sup_iso_prod_eq_locus_hom_snd TopCat.Sheaf.objSupIsoProdEqLocus_hom_snd
-/- warning: Top.sheaf.obj_sup_iso_prod_eq_locus_inv_fst -> TopCat.Sheaf.objSupIsoProdEqLocus_inv_fst is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.obj_sup_iso_prod_eq_locus_inv_fst TopCat.Sheaf.objSupIsoProdEqLocus_inv_fstₓ'. -/
theorem objSupIsoProdEqLocus_inv_fst {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) (x) :
F.1.map (homOfLE le_sup_left).op ((F.objSupIsoProdEqLocus U V).inv x) = x.1.1 :=
ConcreteCategory.congr_hom
@@ -542,9 +485,6 @@ theorem objSupIsoProdEqLocus_inv_fst {X : TopCat} (F : X.Sheaf CommRingCat) (U V
x
#align Top.sheaf.obj_sup_iso_prod_eq_locus_inv_fst TopCat.Sheaf.objSupIsoProdEqLocus_inv_fst
-/- warning: Top.sheaf.obj_sup_iso_prod_eq_locus_inv_snd -> TopCat.Sheaf.objSupIsoProdEqLocus_inv_snd is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align Top.sheaf.obj_sup_iso_prod_eq_locus_inv_snd TopCat.Sheaf.objSupIsoProdEqLocus_inv_sndₓ'. -/
theorem objSupIsoProdEqLocus_inv_snd {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) (x) :
F.1.map (homOfLE le_sup_right).op ((F.objSupIsoProdEqLocus U V).inv x) = x.1.2 :=
ConcreteCategory.congr_hom
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -347,9 +347,7 @@ def interUnionPullbackCone :
PullbackCone (F.1.map (homOfLE inf_le_left : U ⊓ V ⟶ _).op)
(F.1.map (homOfLE inf_le_right).op) :=
PullbackCone.mk (F.1.map (homOfLE le_sup_left).op) (F.1.map (homOfLE le_sup_right).op)
- (by
- rw [← F.1.map_comp, ← F.1.map_comp]
- congr )
+ (by rw [← F.1.map_comp, ← F.1.map_comp]; congr )
#align Top.sheaf.inter_union_pullback_cone TopCat.Sheaf.interUnionPullbackCone
/- warning: Top.sheaf.inter_union_pullback_cone_X -> TopCat.Sheaf.interUnionPullbackCone_pt is a dubious translation:
@@ -412,10 +410,7 @@ def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) :=
rintro i j f
induction i using Opposite.rec'
induction j using Opposite.rec'
- let g : j ⟶ i := f.unop
- have : f = g.op := rfl
- clear_value g
- subst this
+ let g : j ⟶ i := f.unop; have : f = g.op := rfl; clear_value g; subst this
rcases i with (⟨⟨_ | _⟩⟩ | ⟨⟨_ | _⟩, ⟨_⟩⟩) <;> rcases j with (⟨⟨_ | _⟩⟩ | ⟨⟨_ | _⟩, ⟨_⟩⟩) <;>
rcases g with ⟨⟩ <;>
dsimp <;>
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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.sheaf_condition.pairwise_intersections
-! leanprover-community/mathlib commit 8a318021995877a44630c898d0b2bc376fceef3b
+! leanprover-community/mathlib commit 0b7c740e25651db0ba63648fbae9f9d6f941e31b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -18,6 +18,9 @@ import Mathbin.Algebra.Category.Ring.Constructions
/-!
# Equivalent formulations of the sheaf condition
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We give an equivalent formulation of the sheaf condition.
Given any indexed type `ι`, we define `overlap ι`,
@@ -53,6 +56,7 @@ namespace TopCat.Presheaf
section
+#print TopCat.Presheaf.IsSheafPairwiseIntersections /-
/-- An alternative formulation of the sheaf condition
(which we prove equivalent to the usual one below as
`is_sheaf_iff_is_sheaf_pairwise_intersections`).
@@ -63,7 +67,9 @@ A presheaf is a sheaf if `F` sends the cone `(pairwise.cocone U).op` to a limit
def IsSheafPairwiseIntersections (F : Presheaf C X) : Prop :=
∀ ⦃ι : Type w⦄ (U : ι → Opens X), Nonempty (IsLimit (F.mapCone (Pairwise.cocone U).op))
#align Top.presheaf.is_sheaf_pairwise_intersections TopCat.Presheaf.IsSheafPairwiseIntersections
+-/
+#print TopCat.Presheaf.IsSheafPreservesLimitPairwiseIntersections /-
/-- An alternative formulation of the sheaf condition
(which we prove equivalent to the usual one below as
`is_sheaf_iff_is_sheaf_preserves_limit_pairwise_intersections`).
@@ -75,6 +81,7 @@ A presheaf is a sheaf if `F` preserves the limit of `pairwise.diagram U`.
def IsSheafPreservesLimitPairwiseIntersections (F : Presheaf C X) : Prop :=
∀ ⦃ι : Type w⦄ (U : ι → Opens X), Nonempty (PreservesLimit (Pairwise.diagram U).op F)
#align Top.presheaf.is_sheaf_preserves_limit_pairwise_intersections TopCat.Presheaf.IsSheafPreservesLimitPairwiseIntersections
+-/
end
@@ -84,6 +91,7 @@ variable {ι : Type w} (U : ι → Opens X)
open CategoryTheory.Pairwise
+#print TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverObj /-
/-- Implementation detail:
the object level of `pairwise_to_opens_le_cover : pairwise ι ⥤ opens_le_cover U`
-/
@@ -92,9 +100,16 @@ def pairwiseToOpensLeCoverObj : Pairwise ι → OpensLeCover U
| single i => ⟨U i, ⟨i, le_rfl⟩⟩
| pair i j => ⟨U i ⊓ U j, ⟨i, inf_le_left⟩⟩
#align Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover_obj TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverObj
+-/
open CategoryTheory.Pairwise.Hom
+/- warning: Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover_map -> TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverMap is a dubious translation:
+lean 3 declaration is
+ forall {X : TopCat.{u1}} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))) {V : CategoryTheory.Pairwise.{u1} ι} {W : CategoryTheory.Pairwise.{u1} ι}, (Quiver.Hom.{succ u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.Pairwise.CategoryTheory.category.{u1} ι))) V W) -> (Quiver.Hom.{succ u1, u1} (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (TopCat.Presheaf.SheafCondition.OpensLeCover.category.{u1} X ι U))) (TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverObj.{u1} X ι U V) (TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverObj.{u1} X ι U W))
+but is expected to have type
+ forall {X : TopCat.{u1}} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))) {V : CategoryTheory.Pairwise.{u1} ι} {W : CategoryTheory.Pairwise.{u1} ι}, (Quiver.Hom.{succ u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.Pairwise.instCategoryPairwise.{u1} ι))) V W) -> (Quiver.Hom.{succ u1, u1} (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (CategoryTheory.CategoryStruct.toQuiver.{u1, u1} (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (CategoryTheory.Category.toCategoryStruct.{u1, u1} (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (TopCat.Presheaf.SheafCondition.instCategoryOpensLeCover.{u1} X ι U))) (TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverObj.{u1} X ι U V) (TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverObj.{u1} X ι U W))
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover_map TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverMapₓ'. -/
/-- Implementation detail:
the morphism level of `pairwise_to_opens_le_cover : pairwise ι ⥤ opens_le_cover U`
-/
@@ -106,6 +121,12 @@ def pairwiseToOpensLeCoverMap :
| _, _, right i j => homOfLE inf_le_right
#align Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover_map TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverMap
+/- warning: Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover -> TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCover is a dubious translation:
+lean 3 declaration is
+ forall {X : TopCat.{u1}} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (coeSort.{succ (succ u1), succ (succ u1)} TopCat.{u1} Type.{u1} TopCat.hasCoeToSort.{u1} X) (TopCat.topologicalSpace.{u1} X))), CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.Pairwise.CategoryTheory.category.{u1} ι) (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (TopCat.Presheaf.SheafCondition.OpensLeCover.category.{u1} X ι U)
+but is expected to have type
+ forall {X : TopCat.{u1}} {ι : Type.{u1}} (U : ι -> (TopologicalSpace.Opens.{u1} (CategoryTheory.Bundled.α.{u1, u1} TopologicalSpace.{u1} X) (TopCat.topologicalSpace_coe.{u1} X))), CategoryTheory.Functor.{u1, u1, u1, u1} (CategoryTheory.Pairwise.{u1} ι) (CategoryTheory.Pairwise.instCategoryPairwise.{u1} ι) (TopCat.Presheaf.SheafCondition.OpensLeCover.{u1} X ι U) (TopCat.Presheaf.SheafCondition.instCategoryOpensLeCover.{u1} X ι U)
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCoverₓ'. -/
/-- The category of single and double intersections of the `U i` maps into the category
of open sets below some `U i`.
-/
@@ -215,6 +236,9 @@ instance : Functor.Final (pairwiseToOpensLeCover U) :=
right := left i' j' }⟩)
List.Chain.nil)))⟩
+/- warning: Top.presheaf.sheaf_condition.pairwise_diagram_iso -> TopCat.Presheaf.SheafCondition.pairwiseDiagramIso is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition.pairwise_diagram_iso TopCat.Presheaf.SheafCondition.pairwiseDiagramIsoₓ'. -/
/-- The diagram in `opens X` indexed by pairwise intersections from `U` is isomorphic
(in fact, equal) to the diagram factored through `opens_le_cover U`.
-/
@@ -224,6 +248,9 @@ def pairwiseDiagramIso : Pairwise.diagram U ≅ pairwiseToOpensLeCover U ⋙ ful
inv := { app := by rintro (i | ⟨i, j⟩) <;> exact 𝟙 _ }
#align Top.presheaf.sheaf_condition.pairwise_diagram_iso TopCat.Presheaf.SheafCondition.pairwiseDiagramIso
+/- warning: Top.presheaf.sheaf_condition.pairwise_cocone_iso -> TopCat.Presheaf.SheafCondition.pairwiseCoconeIso is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.presheaf.sheaf_condition.pairwise_cocone_iso TopCat.Presheaf.SheafCondition.pairwiseCoconeIsoₓ'. -/
/--
The cocone `pairwise.cocone U` with cocone point `supr U` over `pairwise.diagram U` is isomorphic
to the cocone `opens_le_cover_cocone U` (with the same cocone point)
@@ -242,6 +269,7 @@ open SheafCondition
variable (F : Presheaf C X)
+#print TopCat.Presheaf.isSheafOpensLeCover_iff_isSheafPairwiseIntersections /-
/-- The sheaf condition
in terms of a limit diagram over all `{ V : opens X // ∃ i, V ≤ U i }`
is equivalent to the reformulation
@@ -272,7 +300,9 @@ theorem isSheafOpensLeCover_iff_isSheafPairwiseIntersections :
IsLimit.equivIsoLimit ((Cones.functoriality _ _).mapIso (pairwiseCoconeIso U : _).symm)
#align Top.presheaf.is_sheaf_opens_le_cover_iff_is_sheaf_pairwise_intersections TopCat.Presheaf.isSheafOpensLeCover_iff_isSheafPairwiseIntersections
+-/
+#print TopCat.Presheaf.isSheaf_iff_isSheafPairwiseIntersections /-
/-- The sheaf condition in terms of an equalizer diagram is equivalent
to the reformulation in terms of a limit diagram over `U i` and `U i ⊓ U j`.
-/
@@ -280,7 +310,9 @@ theorem isSheaf_iff_isSheafPairwiseIntersections : F.IsSheaf ↔ F.IsSheafPairwi
rw [is_sheaf_iff_is_sheaf_opens_le_cover,
is_sheaf_opens_le_cover_iff_is_sheaf_pairwise_intersections]
#align Top.presheaf.is_sheaf_iff_is_sheaf_pairwise_intersections TopCat.Presheaf.isSheaf_iff_isSheafPairwiseIntersections
+-/
+#print TopCat.Presheaf.isSheaf_iff_isSheafPreservesLimitPairwiseIntersections /-
/-- The sheaf condition in terms of an equalizer diagram is equivalent
to the reformulation in terms of the presheaf preserving the limit of the diagram
consisting of the `U i` and `U i ⊓ U j`.
@@ -296,6 +328,7 @@ theorem isSheaf_iff_isSheafPreservesLimitPairwiseIntersections :
haveI := (h U).some
exact ⟨preserves_limit.preserves (pairwise.cocone_is_colimit U).op⟩
#align Top.presheaf.is_sheaf_iff_is_sheaf_preserves_limit_pairwise_intersections TopCat.Presheaf.isSheaf_iff_isSheafPreservesLimitPairwiseIntersections
+-/
end TopCat.Presheaf
@@ -305,6 +338,9 @@ variable (F : X.Sheaf C) (U V : Opens X)
open CategoryTheory.Limits
+/- warning: Top.sheaf.inter_union_pullback_cone -> TopCat.Sheaf.interUnionPullbackCone is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone TopCat.Sheaf.interUnionPullbackConeₓ'. -/
/-- For a sheaf `F`, `F(U ⊔ V)` is the pullback of `F(U) ⟶ F(U ⊓ V)` and `F(V) ⟶ F(U ⊓ V)`.
This is the pullback cone. -/
def interUnionPullbackCone :
@@ -316,17 +352,26 @@ def interUnionPullbackCone :
congr )
#align Top.sheaf.inter_union_pullback_cone TopCat.Sheaf.interUnionPullbackCone
+/- warning: Top.sheaf.inter_union_pullback_cone_X -> TopCat.Sheaf.interUnionPullbackCone_pt is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone_X TopCat.Sheaf.interUnionPullbackCone_ptₓ'. -/
@[simp]
theorem interUnionPullbackCone_pt : (interUnionPullbackCone F U V).pt = F.1.obj (op <| U ⊔ V) :=
rfl
#align Top.sheaf.inter_union_pullback_cone_X TopCat.Sheaf.interUnionPullbackCone_pt
+/- warning: Top.sheaf.inter_union_pullback_cone_fst -> TopCat.Sheaf.interUnionPullbackCone_fst is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone_fst TopCat.Sheaf.interUnionPullbackCone_fstₓ'. -/
@[simp]
theorem interUnionPullbackCone_fst :
(interUnionPullbackCone F U V).fst = F.1.map (homOfLE le_sup_left).op :=
rfl
#align Top.sheaf.inter_union_pullback_cone_fst TopCat.Sheaf.interUnionPullbackCone_fst
+/- warning: Top.sheaf.inter_union_pullback_cone_snd -> TopCat.Sheaf.interUnionPullbackCone_snd is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone_snd TopCat.Sheaf.interUnionPullbackCone_sndₓ'. -/
@[simp]
theorem interUnionPullbackCone_snd :
(interUnionPullbackCone F U V).snd = F.1.map (homOfLE le_sup_right).op :=
@@ -337,6 +382,9 @@ variable
(s :
PullbackCone (F.1.map (homOfLE inf_le_left : U ⊓ V ⟶ _).op) (F.1.map (homOfLE inf_le_right).op))
+/- warning: Top.sheaf.inter_union_pullback_cone_lift -> TopCat.Sheaf.interUnionPullbackConeLift is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone_lift TopCat.Sheaf.interUnionPullbackConeLiftₓ'. -/
/-- (Implementation).
Every cone over `F(U) ⟶ F(U ⊓ V)` and `F(V) ⟶ F(U ⊓ V)` factors through `F(U ⊔ V)`.
-/
@@ -378,6 +426,9 @@ def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) :=
convert s.condition.symm
#align Top.sheaf.inter_union_pullback_cone_lift TopCat.Sheaf.interUnionPullbackConeLift
+/- warning: Top.sheaf.inter_union_pullback_cone_lift_left -> TopCat.Sheaf.interUnionPullbackConeLift_left is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone_lift_left TopCat.Sheaf.interUnionPullbackConeLift_leftₓ'. -/
theorem interUnionPullbackConeLift_left :
interUnionPullbackConeLift F U V s ≫ F.1.map (homOfLE le_sup_left).op = s.fst :=
by
@@ -387,6 +438,9 @@ theorem interUnionPullbackConeLift_left :
(op <| pairwise.single (ULift.up walking_pair.left))
#align Top.sheaf.inter_union_pullback_cone_lift_left TopCat.Sheaf.interUnionPullbackConeLift_left
+/- warning: Top.sheaf.inter_union_pullback_cone_lift_right -> TopCat.Sheaf.interUnionPullbackConeLift_right is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.inter_union_pullback_cone_lift_right TopCat.Sheaf.interUnionPullbackConeLift_rightₓ'. -/
theorem interUnionPullbackConeLift_right :
interUnionPullbackConeLift F U V s ≫ F.1.map (homOfLE le_sup_right).op = s.snd :=
by
@@ -396,6 +450,9 @@ theorem interUnionPullbackConeLift_right :
(op <| pairwise.single (ULift.up walking_pair.right))
#align Top.sheaf.inter_union_pullback_cone_lift_right TopCat.Sheaf.interUnionPullbackConeLift_right
+/- warning: Top.sheaf.is_limit_pullback_cone -> TopCat.Sheaf.isLimitPullbackCone is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.is_limit_pullback_cone TopCat.Sheaf.isLimitPullbackConeₓ'. -/
/-- For a sheaf `F`, `F(U ⊔ V)` is the pullback of `F(U) ⟶ F(U ⊓ V)` and `F(V) ⟶ F(U ⊓ V)`. -/
def isLimitPullbackCone : IsLimit (interUnionPullbackCone F U V) :=
by
@@ -437,6 +494,9 @@ def isLimitPullbackCone : IsLimit (interUnionPullbackCone F U V) :=
apply inter_union_pullback_cone_lift_right
#align Top.sheaf.is_limit_pullback_cone TopCat.Sheaf.isLimitPullbackCone
+/- warning: Top.sheaf.is_product_of_disjoint -> TopCat.Sheaf.isProductOfDisjoint is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.is_product_of_disjoint TopCat.Sheaf.isProductOfDisjointₓ'. -/
/-- If `U, V` are disjoint, then `F(U ⊔ V) = F(U) × F(V)`. -/
def isProductOfDisjoint (h : U ⊓ V = ⊥) :
IsLimit
@@ -445,12 +505,18 @@ def isProductOfDisjoint (h : U ⊓ V = ⊥) :
isProductOfIsTerminalIsPullback _ _ _ _ (F.isTerminalOfEqEmpty h) (isLimitPullbackCone F U V)
#align Top.sheaf.is_product_of_disjoint TopCat.Sheaf.isProductOfDisjoint
+/- warning: Top.sheaf.obj_sup_iso_prod_eq_locus -> TopCat.Sheaf.objSupIsoProdEqLocus is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.obj_sup_iso_prod_eq_locus TopCat.Sheaf.objSupIsoProdEqLocusₓ'. -/
/-- `F(U ⊔ V)` is isomorphic to the `eq_locus` of the two maps `F(U) × F(V) ⟶ F(U ⊓ V)`. -/
def objSupIsoProdEqLocus {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) :
F.1.obj (op <| U ⊔ V) ≅ CommRingCat.of (RingHom.eqLocus _ _) :=
(F.isLimitPullbackCone U V).conePointUniqueUpToIso (CommRingCat.pullbackConeIsLimit _ _)
#align Top.sheaf.obj_sup_iso_prod_eq_locus TopCat.Sheaf.objSupIsoProdEqLocus
+/- warning: Top.sheaf.obj_sup_iso_prod_eq_locus_hom_fst -> TopCat.Sheaf.objSupIsoProdEqLocus_hom_fst is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.obj_sup_iso_prod_eq_locus_hom_fst TopCat.Sheaf.objSupIsoProdEqLocus_hom_fstₓ'. -/
theorem objSupIsoProdEqLocus_hom_fst {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) (x) :
((F.objSupIsoProdEqLocus U V).Hom x).1.fst = F.1.map (homOfLE le_sup_left).op x :=
ConcreteCategory.congr_hom
@@ -459,6 +525,9 @@ theorem objSupIsoProdEqLocus_hom_fst {X : TopCat} (F : X.Sheaf CommRingCat) (U V
x
#align Top.sheaf.obj_sup_iso_prod_eq_locus_hom_fst TopCat.Sheaf.objSupIsoProdEqLocus_hom_fst
+/- warning: Top.sheaf.obj_sup_iso_prod_eq_locus_hom_snd -> TopCat.Sheaf.objSupIsoProdEqLocus_hom_snd is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.obj_sup_iso_prod_eq_locus_hom_snd TopCat.Sheaf.objSupIsoProdEqLocus_hom_sndₓ'. -/
theorem objSupIsoProdEqLocus_hom_snd {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) (x) :
((F.objSupIsoProdEqLocus U V).Hom x).1.snd = F.1.map (homOfLE le_sup_right).op x :=
ConcreteCategory.congr_hom
@@ -467,6 +536,9 @@ theorem objSupIsoProdEqLocus_hom_snd {X : TopCat} (F : X.Sheaf CommRingCat) (U V
x
#align Top.sheaf.obj_sup_iso_prod_eq_locus_hom_snd TopCat.Sheaf.objSupIsoProdEqLocus_hom_snd
+/- warning: Top.sheaf.obj_sup_iso_prod_eq_locus_inv_fst -> TopCat.Sheaf.objSupIsoProdEqLocus_inv_fst is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.obj_sup_iso_prod_eq_locus_inv_fst TopCat.Sheaf.objSupIsoProdEqLocus_inv_fstₓ'. -/
theorem objSupIsoProdEqLocus_inv_fst {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) (x) :
F.1.map (homOfLE le_sup_left).op ((F.objSupIsoProdEqLocus U V).inv x) = x.1.1 :=
ConcreteCategory.congr_hom
@@ -475,6 +547,9 @@ theorem objSupIsoProdEqLocus_inv_fst {X : TopCat} (F : X.Sheaf CommRingCat) (U V
x
#align Top.sheaf.obj_sup_iso_prod_eq_locus_inv_fst TopCat.Sheaf.objSupIsoProdEqLocus_inv_fst
+/- warning: Top.sheaf.obj_sup_iso_prod_eq_locus_inv_snd -> TopCat.Sheaf.objSupIsoProdEqLocus_inv_snd is a dubious translation:
+<too large>
+Case conversion may be inaccurate. Consider using '#align Top.sheaf.obj_sup_iso_prod_eq_locus_inv_snd TopCat.Sheaf.objSupIsoProdEqLocus_inv_sndₓ'. -/
theorem objSupIsoProdEqLocus_inv_snd {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) (x) :
F.1.map (homOfLE le_sup_right).op ((F.objSupIsoProdEqLocus U V).inv x) = x.1.2 :=
ConcreteCategory.congr_hom
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -343,9 +343,9 @@ Every cone over `F(U) ⟶ F(U ⊓ V)` and `F(V) ⟶ F(U ⊓ V)` factors through
def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) :=
by
let ι : ULift.{w} walking_pair → opens X := fun j => walking_pair.cases_on j.down U V
- have hι : U ⊔ V = supᵢ ι := by
+ have hι : U ⊔ V = iSup ι := by
ext
- rw [opens.coe_supr, Set.mem_unionᵢ]
+ rw [opens.coe_supr, Set.mem_iUnion]
constructor
· rintro (h | h)
exacts[⟨⟨walking_pair.left⟩, h⟩, ⟨⟨walking_pair.right⟩, h⟩]
@@ -400,9 +400,9 @@ theorem interUnionPullbackConeLift_right :
def isLimitPullbackCone : IsLimit (interUnionPullbackCone F U V) :=
by
let ι : ULift.{w} walking_pair → opens X := fun ⟨j⟩ => walking_pair.cases_on j U V
- have hι : U ⊔ V = supᵢ ι := by
+ have hι : U ⊔ V = iSup ι := by
ext
- rw [opens.coe_supr, Set.mem_unionᵢ]
+ rw [opens.coe_supr, Set.mem_iUnion]
constructor
· rintro (h | h)
exacts[⟨⟨walking_pair.left⟩, h⟩, ⟨⟨walking_pair.right⟩, h⟩]
mathlib commit https://github.com/leanprover-community/mathlib/commit/49b7f94aab3a3bdca1f9f34c5d818afb253b3993
@@ -357,13 +357,13 @@ def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) :=
{ app := _
naturality' := _ }⟩ ≫
F.1.map (eq_to_hom hι).op
- · apply Opposite.rec
+ · apply Opposite.rec'
rintro ((_ | _) | (_ | _))
exacts[s.fst, s.snd, s.fst ≫ F.1.map (hom_of_le inf_le_left).op,
s.snd ≫ F.1.map (hom_of_le inf_le_left).op]
rintro i j f
- induction i using Opposite.rec
- induction j using Opposite.rec
+ induction i using Opposite.rec'
+ induction j using Opposite.rec'
let g : j ⟶ i := f.unop
have : f = g.op := rfl
clear_value g
@@ -417,7 +417,7 @@ def isLimitPullbackCone : IsLimit (interUnionPullbackCone F U V) :=
· intro m h₁ h₂
rw [← cancel_mono (F.1.map (eq_to_hom hι.symm).op)]
apply (F.presheaf.is_sheaf_iff_is_sheaf_pairwise_intersections.mp F.2 ι).some.hom_ext
- apply Opposite.rec
+ apply Opposite.rec'
rintro ((_ | _) | (_ | _)) <;> rw [category.assoc, category.assoc]
· erw [← F.1.map_comp]
convert h₁
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -256,7 +256,7 @@ theorem isSheafOpensLeCover_iff_isSheafPairwiseIntersections :
IsLimit ((F.mapCone (opensLeCoverCocone U).op).whisker (pairwiseToOpensLeCover U).op) :=
(Functor.Initial.isLimitWhiskerEquiv (pairwiseToOpensLeCover U).op _).symm
_ ≃ IsLimit (F.mapCone ((opensLeCoverCocone U).op.whisker (pairwiseToOpensLeCover U).op)) :=
- IsLimit.equivIsoLimit F.mapConeWhisker.symm
+ (IsLimit.equivIsoLimit F.mapConeWhisker.symm)
_ ≃
IsLimit
((Cones.postcomposeEquivalence _).Functor.obj
@@ -267,7 +267,7 @@ theorem isSheafOpensLeCover_iff_isSheafPairwiseIntersections :
(F.mapCone
((Cones.postcomposeEquivalence _).Functor.obj
((opensLeCoverCocone U).op.whisker (pairwiseToOpensLeCover U).op))) :=
- IsLimit.equivIsoLimit (Functor.mapConePostcomposeEquivalenceFunctor _).symm
+ (IsLimit.equivIsoLimit (Functor.mapConePostcomposeEquivalenceFunctor _).symm)
_ ≃ IsLimit (F.mapCone (Pairwise.cocone U).op) :=
IsLimit.equivIsoLimit ((Cones.functoriality _ _).mapIso (pairwiseCoconeIso U : _).symm)
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -317,9 +317,9 @@ def interUnionPullbackCone :
#align Top.sheaf.inter_union_pullback_cone TopCat.Sheaf.interUnionPullbackCone
@[simp]
-theorem interUnionPullbackCone_x : (interUnionPullbackCone F U V).x = F.1.obj (op <| U ⊔ V) :=
+theorem interUnionPullbackCone_pt : (interUnionPullbackCone F U V).pt = F.1.obj (op <| U ⊔ V) :=
rfl
-#align Top.sheaf.inter_union_pullback_cone_X TopCat.Sheaf.interUnionPullbackCone_x
+#align Top.sheaf.inter_union_pullback_cone_X TopCat.Sheaf.interUnionPullbackCone_pt
@[simp]
theorem interUnionPullbackCone_fst :
@@ -340,7 +340,7 @@ variable
/-- (Implementation).
Every cone over `F(U) ⟶ F(U ⊓ V)` and `F(V) ⟶ F(U ⊓ V)` factors through `F(U ⊔ V)`.
-/
-def interUnionPullbackConeLift : s.x ⟶ F.1.obj (op (U ⊔ V)) :=
+def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) :=
by
let ι : ULift.{w} walking_pair → opens X := fun j => walking_pair.cases_on j.down U V
have hι : U ⊔ V = supᵢ ι := by
mathlib commit https://github.com/leanprover-community/mathlib/commit/22131150f88a2d125713ffa0f4693e3355b1eb49
@@ -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.sheaf_condition.pairwise_intersections
-! leanprover-community/mathlib commit 85d6221d32c37e68f05b2e42cde6cee658dae5e9
+! leanprover-community/mathlib commit 8a318021995877a44630c898d0b2bc376fceef3b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -117,8 +117,7 @@ def pairwiseToOpensLeCover : Pairwise ι ⥤ OpensLeCover U
#align Top.presheaf.sheaf_condition.pairwise_to_opens_le_cover TopCat.Presheaf.SheafCondition.pairwiseToOpensLeCover
instance (V : OpensLeCover U) : Nonempty (StructuredArrow V (pairwiseToOpensLeCover U)) :=
- ⟨{ right := single V.index
- Hom := V.homToIndex }⟩
+ ⟨@StructuredArrow.mk _ _ _ _ _ (single V.index) _ V.hom_to_index⟩
-- This is a case bash: for each pair of types of objects in `pairwise ι`,
-- we have to explicitly construct a zigzag.
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
A mix of various changes; generated with a script and manually tweaked.
@@ -33,7 +33,7 @@ We express this in two equivalent ways, as
* `is_limit (F.map_cone (cone U))`, or
* `preserves_limit (diagram U) F`
-We show that this sheaf condition is equivalent to the `opens_le_cover` sheaf condition, and
+We show that this sheaf condition is equivalent to the `OpensLeCover` sheaf condition, and
thereby also equivalent to the default sheaf condition.
-/
@@ -52,7 +52,7 @@ section
/-- An alternative formulation of the sheaf condition
(which we prove equivalent to the usual one below as
-`is_sheaf_iff_is_sheaf_pairwise_intersections`).
+`isSheaf_iff_isSheafPairwiseIntersections`).
A presheaf is a sheaf if `F` sends the cone `(pairwise.cocone U).op` to a limit cone.
(Recall `Pairwise.cocone U` has cone point `supr U`, mapping down to the `U i` and the `U i ⊓ U j`.)
@@ -64,7 +64,7 @@ set_option linter.uppercaseLean3 false in
/-- An alternative formulation of the sheaf condition
(which we prove equivalent to the usual one below as
-`is_sheaf_iff_is_sheaf_preserves_limit_pairwise_intersections`).
+`isSheaf_iff_isSheafPreservesLimitPairwiseIntersections`).
A presheaf is a sheaf if `F` preserves the limit of `Pairwise.diagram U`.
(Recall `Pairwise.diagram U` is the diagram consisting of the pairwise intersections
@@ -215,7 +215,7 @@ instance : Functor.Final (pairwiseToOpensLeCover U) :=
List.Chain.nil)))⟩
/-- The diagram in `opens X` indexed by pairwise intersections from `U` is isomorphic
-(in fact, equal) to the diagram factored through `opens_le_cover U`.
+(in fact, equal) to the diagram factored through `OpensLeCover U`.
-/
def pairwiseDiagramIso : Pairwise.diagram U ≅ pairwiseToOpensLeCover U ⋙ fullSubcategoryInclusion _
where
@@ -226,7 +226,7 @@ set_option linter.uppercaseLean3 false in
/--
The cocone `Pairwise.cocone U` with cocone point `supr U` over `Pairwise.diagram U` is isomorphic
-to the cocone `opens_le_cover_cocone U` (with the same cocone point)
+to the cocone `opensLeCoverCocone U` (with the same cocone point)
after appropriate whiskering and postcomposition.
-/
def pairwiseCoconeIso :
Those lemmas have historically been very annoying to use in rw
since all their arguments were implicit. One too many people complained about it on Zulip, so I'm changing them.
Downstream code broken by this change can fix it by adding appropriately many _
s.
Also marks CauSeq.ext
@[ext]
.
Order.BoundedOrder
top_sup_eq
sup_top_eq
bot_sup_eq
sup_bot_eq
top_inf_eq
inf_top_eq
bot_inf_eq
inf_bot_eq
Order.Lattice
sup_idem
sup_comm
sup_assoc
sup_left_idem
sup_right_idem
inf_idem
inf_comm
inf_assoc
inf_left_idem
inf_right_idem
sup_inf_left
sup_inf_right
inf_sup_left
inf_sup_right
Order.MinMax
max_min_distrib_left
max_min_distrib_right
min_max_distrib_left
min_max_distrib_right
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -374,7 +374,7 @@ def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) := by
rcases g with ⟨⟩ <;>
dsimp [Pairwise.diagram] <;>
simp only [Category.id_comp, s.condition, CategoryTheory.Functor.map_id, Category.comp_id]
- · rw [← cancel_mono (F.1.map (eqToHom <| inf_comm : U ⊓ V ⟶ _).op), Category.assoc,
+ · rw [← cancel_mono (F.1.map (eqToHom <| inf_comm U V : U ⊓ V ⟶ _).op), Category.assoc,
Category.assoc, ← F.1.map_comp, ← F.1.map_comp]
exact s.condition.symm
set_option linter.uppercaseLean3 false in
In this pull request, I have systematically eliminated the leading whitespace preceding the colon (:
) within all unlabelled or unclassified porting notes. This adjustment facilitates a more efficient review process for the remaining notes by ensuring no entries are overlooked due to formatting inconsistencies.
@@ -453,7 +453,7 @@ set_option linter.uppercaseLean3 false in
/-- `F(U ⊔ V)` is isomorphic to the `eq_locus` of the two maps `F(U) × F(V) ⟶ F(U ⊓ V)`. -/
def objSupIsoProdEqLocus {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) :
F.1.obj (op <| U ⊔ V) ≅ CommRingCat.of <|
- -- Porting note : Lean 3 is able to figure out the ring homomorphism automatically
+ -- Porting note: Lean 3 is able to figure out the ring homomorphism automatically
RingHom.eqLocus
(RingHom.comp (F.val.map (homOfLE inf_le_left : U ⊓ V ⟶ U).op)
(RingHom.fst (F.val.obj <| op U) (F.val.obj <| op V)))
@@ -375,7 +375,7 @@ def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) := by
dsimp [Pairwise.diagram] <;>
simp only [Category.id_comp, s.condition, CategoryTheory.Functor.map_id, Category.comp_id]
· rw [← cancel_mono (F.1.map (eqToHom <| inf_comm : U ⊓ V ⟶ _).op), Category.assoc,
- Category.assoc, ←F.1.map_comp, ←F.1.map_comp]
+ Category.assoc, ← F.1.map_comp, ← F.1.map_comp]
exact s.condition.symm
set_option linter.uppercaseLean3 false in
#align Top.sheaf.inter_union_pullback_cone_lift TopCat.Sheaf.interUnionPullbackConeLift
And fix some names in comments where this revealed issues
@@ -55,7 +55,7 @@ section
`is_sheaf_iff_is_sheaf_pairwise_intersections`).
A presheaf is a sheaf if `F` sends the cone `(pairwise.cocone U).op` to a limit cone.
-(Recall `pairwise.cocone U` has cone point `supr U`, mapping down to the `U i` and the `U i ⊓ U j`.)
+(Recall `Pairwise.cocone U` has cone point `supr U`, mapping down to the `U i` and the `U i ⊓ U j`.)
-/
def IsSheafPairwiseIntersections (F : Presheaf C X) : Prop :=
∀ ⦃ι : Type w⦄ (U : ι → Opens X), Nonempty (IsLimit (F.mapCone (Pairwise.cocone U).op))
@@ -66,8 +66,8 @@ set_option linter.uppercaseLean3 false in
(which we prove equivalent to the usual one below as
`is_sheaf_iff_is_sheaf_preserves_limit_pairwise_intersections`).
-A presheaf is a sheaf if `F` preserves the limit of `pairwise.diagram U`.
-(Recall `pairwise.diagram U` is the diagram consisting of the pairwise intersections
+A presheaf is a sheaf if `F` preserves the limit of `Pairwise.diagram U`.
+(Recall `Pairwise.diagram U` is the diagram consisting of the pairwise intersections
`U i ⊓ U j` mapping into the open sets `U i`. This diagram has limit `supr U`.)
-/
def IsSheafPreservesLimitPairwiseIntersections (F : Presheaf C X) : Prop :=
@@ -225,7 +225,7 @@ set_option linter.uppercaseLean3 false in
#align Top.presheaf.sheaf_condition.pairwise_diagram_iso TopCat.Presheaf.SheafCondition.pairwiseDiagramIso
/--
-The cocone `pairwise.cocone U` with cocone point `supr U` over `pairwise.diagram U` is isomorphic
+The cocone `Pairwise.cocone U` with cocone point `supr U` over `Pairwise.diagram U` is isomorphic
to the cocone `opens_le_cover_cocone U` (with the same cocone point)
after appropriate whiskering and postcomposition.
-/
@@ -452,7 +452,7 @@ set_option linter.uppercaseLean3 false in
/-- `F(U ⊔ V)` is isomorphic to the `eq_locus` of the two maps `F(U) × F(V) ⟶ F(U ⊓ V)`. -/
def objSupIsoProdEqLocus {X : TopCat} (F : X.Sheaf CommRingCat) (U V : Opens X) :
- F.1.obj (op <| U ⊔ V) ≅ CommRingCat.of <|
+ F.1.obj (op <| U ⊔ V) ≅ CommRingCat.of <|
-- Porting note : Lean 3 is able to figure out the ring homomorphism automatically
RingHom.eqLocus
(RingHom.comp (F.val.map (homOfLE inf_le_left : U ⊓ V ⟶ U).op)
@@ -128,8 +128,7 @@ of all opens contained in some `U i`.
instance : Functor.Final (pairwiseToOpensLeCover U) :=
⟨fun V =>
isConnected_of_zigzag fun A B => by
- rcases A with ⟨⟨⟨⟩⟩, ⟨i⟩ | ⟨i, j⟩, a⟩ <;> rcases B with ⟨⟨⟨⟩⟩, ⟨i'⟩ | ⟨i', j'⟩, b⟩ <;>
- dsimp at *
+ rcases A with ⟨⟨⟨⟩⟩, ⟨i⟩ | ⟨i, j⟩, a⟩ <;> rcases B with ⟨⟨⟨⟩⟩, ⟨i'⟩ | ⟨i', j'⟩, b⟩
· refine'
⟨[{ left := ⟨⟨⟩⟩
right := pair i i'
@@ -2,11 +2,6 @@
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.sheaf_condition.pairwise_intersections
-! leanprover-community/mathlib commit 8a318021995877a44630c898d0b2bc376fceef3b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Topology.Sheaves.SheafCondition.OpensLeCover
import Mathlib.CategoryTheory.Limits.Final
@@ -15,6 +10,8 @@ import Mathlib.CategoryTheory.Category.Pairwise
import Mathlib.CategoryTheory.Limits.Constructions.BinaryProducts
import Mathlib.Algebra.Category.Ring.Constructions
+#align_import topology.sheaves.sheaf_condition.pairwise_intersections from "leanprover-community/mathlib"@"8a318021995877a44630c898d0b2bc376fceef3b"
+
/-!
# Equivalent formulations of the sheaf condition
This PR is the result of running
find . -type f -name "*.lean" -exec sed -i -E 's/^( +)\. /\1· /' {} \;
find . -type f -name "*.lean" -exec sed -i -E 'N;s/^( +·)\n +(.*)$/\1 \2/;P;D' {} \;
which firstly replaces .
focusing dots with ·
and secondly removes isolated instances of such dots, unifying them with the following line. A new rule is placed in the style linter to verify this.
@@ -378,7 +378,7 @@ def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) := by
rcases g with ⟨⟩ <;>
dsimp [Pairwise.diagram] <;>
simp only [Category.id_comp, s.condition, CategoryTheory.Functor.map_id, Category.comp_id]
- . rw [← cancel_mono (F.1.map (eqToHom <| inf_comm : U ⊓ V ⟶ _).op), Category.assoc,
+ · rw [← cancel_mono (F.1.map (eqToHom <| inf_comm : U ⊓ V ⟶ _).op), Category.assoc,
Category.assoc, ←F.1.map_comp, ←F.1.map_comp]
exact s.condition.symm
set_option linter.uppercaseLean3 false in
@@ -356,9 +356,9 @@ def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) := by
rw [Opens.coe_iSup, Set.mem_iUnion]
constructor
· rintro (h | h)
- exacts[⟨⟨WalkingPair.left⟩, h⟩, ⟨⟨WalkingPair.right⟩, h⟩]
+ exacts [⟨⟨WalkingPair.left⟩, h⟩, ⟨⟨WalkingPair.right⟩, h⟩]
· rintro ⟨⟨_ | _⟩, h⟩
- exacts[Or.inl h, Or.inr h]
+ exacts [Or.inl h, Or.inr h]
refine'
(F.presheaf.isSheaf_iff_isSheafPairwiseIntersections.mp F.2 ι).some.lift
⟨s.pt,
@@ -412,9 +412,9 @@ def isLimitPullbackCone : IsLimit (interUnionPullbackCone F U V) := by
rw [Opens.coe_iSup, Set.mem_iUnion]
constructor
· rintro (h | h)
- exacts[⟨⟨WalkingPair.left⟩, h⟩, ⟨⟨WalkingPair.right⟩, h⟩]
+ exacts [⟨⟨WalkingPair.left⟩, h⟩, ⟨⟨WalkingPair.right⟩, h⟩]
· rintro ⟨⟨_ | _⟩, h⟩
- exacts[Or.inl h, Or.inr h]
+ exacts [Or.inl h, Or.inr h]
apply PullbackCone.isLimitAux'
intro s
use interUnionPullbackConeLift F U V s
@@ -365,15 +365,10 @@ def interUnionPullbackConeLift : s.pt ⟶ F.1.obj (op (U ⊔ V)) := by
{ app := _
naturality := _ }⟩ ≫
F.1.map (eqToHom hι).op
- · apply Opposite.rec'
- rintro ((_ | _) | (_ | _))
- exacts[s.fst, s.snd, s.fst ≫ F.1.map (homOfLE inf_le_left).op,
+ · rintro ((_ | _) | (_ | _))
+ exacts [s.fst, s.snd, s.fst ≫ F.1.map (homOfLE inf_le_left).op,
s.snd ≫ F.1.map (homOfLE inf_le_left).op]
- rintro i j f
- induction i using Opposite.rec' with
- | h i => ?_
- induction j using Opposite.rec' with
- | h j => ?_
+ rintro ⟨i⟩ ⟨j⟩ f
let g : j ⟶ i := f.unop
have : f = g.op := rfl
clear_value g
@@ -429,7 +424,6 @@ def isLimitPullbackCone : IsLimit (interUnionPullbackCone F U V) := by
· intro m h₁ h₂
rw [← cancel_mono (F.1.map (eqToHom hι.symm).op)]
apply (F.presheaf.isSheaf_iff_isSheafPairwiseIntersections.mp F.2 ι).some.hom_ext
- apply Opposite.rec'
rintro ((_ | _) | (_ | _)) <;>
rw [Category.assoc, Category.assoc]
· erw [← F.1.map_comp]
The unported dependencies are