Skip to content

Commit 3b9b4dc

Browse files
committed
refactor(CategoryTheory): redefine MorphismProperty.IsLocalAtTarget in terms of presieves (#39978)
This changes the definition slightly: The condition is now required for covers indexed in `Type max u v`, while before this PR it was only required for index types in `Type v`. Requested in review of #32046.
1 parent 200a08b commit 3b9b4dc

6 files changed

Lines changed: 143 additions & 104 deletions

File tree

Mathlib/AlgebraicGeometry/Cover/Open.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,19 +62,19 @@ def affineCover (X : Scheme.{u}) : OpenCover X := by
6262
instance : Inhabited X.OpenCover :=
6363
⟨X.affineCover⟩
6464

65-
theorem OpenCover.iSup_opensRange {X : Scheme.{u}} (𝒰 : X.OpenCover) :
65+
theorem OpenCover.iSup_opensRange {X : Scheme.{u}} (𝒰 : Scheme.OpenCover.{v} X) :
6666
⨆ i, (𝒰.f i).opensRange = ⊤ :=
6767
Opens.ext <| by rw [Opens.coe_iSup]; exact 𝒰.iUnion_range
6868

6969
/-- The ranges of the maps in a scheme-theoretic open cover are a topological open cover. -/
70-
lemma OpenCover.isOpenCover_opensRange {X : Scheme.{u}} (𝒰 : X.OpenCover) :
70+
lemma OpenCover.isOpenCover_opensRange {X : Scheme.{u}} (𝒰 : OpenCover.{v} X) :
7171
IsOpenCover fun i ↦ (𝒰.f i).opensRange :=
7272
.mk 𝒰.iSup_opensRange
7373

7474
/-- Every open cover of a quasi-compact scheme can be refined into a finite subcover.
7575
-/
7676
@[simps! X f]
77-
def OpenCover.finiteSubcover {X : Scheme.{u}} (𝒰 : OpenCover X) [H : CompactSpace X] :
77+
def OpenCover.finiteSubcover {X : Scheme.{u}} (𝒰 : OpenCover.{v} X) [H : CompactSpace X] :
7878
OpenCover X := by
7979
have :=
8080
@CompactSpace.elim_nhds_subcover _ _ H (fun x : X => Set.range (𝒰.f (𝒰.idx x)))

Mathlib/AlgebraicGeometry/Morphisms/Basic.lean

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,12 @@ protected lemma mk' {P : MorphismProperty Scheme} [P.RespectsIso]
125125
(of_sSup_eq_top :
126126
∀ {X Y : Scheme.{u}} (f : X ⟶ Y) {ι : Type u} (U : ι → Y.Opens), iSup U = ⊤ →
127127
(∀ i, P (f ∣_ U i)) → P f) :
128-
IsZariskiLocalAtTarget P where
129-
pullbackSnd 𝒰 i hf := (P.arrow_mk_iso_iff (morphismRestrictOpensRange _ _)).mp (restrict _ _ hf)
130-
of_zeroHypercover {X Y f} 𝒰 h := by
131-
refine of_sSup_eq_top f _ (Scheme.OpenCover.iSup_opensRange 𝒰) ?_
132-
exact fun i ↦ (P.arrow_mk_iso_iff (morphismRestrictOpensRange f _)).mpr (h i)
128+
IsZariskiLocalAtTarget P := by
129+
refine .mk_of_iff_of_zeroHypercover fun {X Y} f 𝒰 ↦ ?_
130+
refine ⟨fun hf i ↦ (P.arrow_mk_iso_iff (morphismRestrictOpensRange _ _)).mp (restrict _ _ hf),
131+
fun h ↦ ?_⟩
132+
refine of_sSup_eq_top f _ (Scheme.OpenCover.iSup_opensRange <| .ulift 𝒰) ?_
133+
exact fun i ↦ (P.arrow_mk_iso_iff (morphismRestrictOpensRange f _)).mpr (h _)
133134

134135
variable {P : MorphismProperty Scheme.{u}} [IsZariskiLocalAtTarget P]
135136
{X Y : Scheme.{u}} {f : X ⟶ Y} (𝒰 : Y.OpenCover)
@@ -233,18 +234,18 @@ protected lemma mk' {P : MorphismProperty Scheme} [P.RespectsIso]
233234
(of_sSup_eq_top :
234235
∀ {X Y : Scheme.{u}} (f : X ⟶ Y) {ι : Type u} (U : ι → X.Opens), iSup U = ⊤ →
235236
(∀ i, P ((U i).ι ≫ f)) → P f) :
236-
IsZariskiLocalAtSource P where
237-
comp 𝒰 i H := by
238-
rw [← IsOpenImmersion.isoOfRangeEq_hom_fac (𝒰.f i) (Scheme.Opens.ι _)
237+
IsZariskiLocalAtSource P := by
238+
refine .mk_of_iff_of_zeroHypercover fun {X Y} f 𝒰 ↦ ⟨fun hf i ↦ ?_, fun hf ↦ ?_⟩
239+
· rw [← IsOpenImmersion.isoOfRangeEq_hom_fac (𝒰.f i) (Scheme.Opens.ι _)
239240
(congr_arg Opens.carrier (𝒰.f i).opensRange.opensRange_ι.symm), Category.assoc,
240241
P.cancel_left_of_respectsIso]
241-
exact restrict _ _ H
242-
of_zeroHypercover {X Y} f 𝒰 h := by
243-
refine of_sSup_eq_top f _ (Scheme.OpenCover.iSup_opensRange 𝒰) fun i ↦ ?_
244-
rw [← IsOpenImmersion.isoOfRangeEq_inv_fac (𝒰.f i) (Scheme.Opens.ι _)
245-
(congr_arg Opens.carrier (𝒰.f i).opensRange.opensRange_ι.symm), Category.assoc,
242+
exact restrict _ _ hf
243+
· refine of_sSup_eq_top f _ (Scheme.OpenCover.iSup_opensRange <| .ulift 𝒰) fun i ↦ ?_
244+
dsimp
245+
rw [← IsOpenImmersion.isoOfRangeEq_inv_fac (𝒰.f _) (Scheme.Opens.ι _)
246+
(congr_arg Opens.carrier (𝒰.f _).opensRange.opensRange_ι.symm), Category.assoc,
246247
P.cancel_left_of_respectsIso]
247-
exact h _
248+
exact hf _
248249

249250
variable {P : MorphismProperty Scheme.{u}} [IsZariskiLocalAtSource P]
250251
variable {X Y : Scheme.{u}} {f : X ⟶ Y} (𝒰 : X.OpenCover)
@@ -286,13 +287,12 @@ lemma of_isOpenImmersion [P.ContainsIdentities] [IsOpenImmersion f] : P f :=
286287

287288
lemma isZariskiLocalAtTarget [P.IsMultiplicative]
288289
(hP : ∀ {X Y Z : Scheme.{u}} (f : X ⟶ Y) (g : Y ⟶ Z) [IsOpenImmersion g], P (f ≫ g) → P f) :
289-
IsZariskiLocalAtTarget P where
290-
pullbackSnd {X Y} f 𝒰 i hf := by
291-
apply hP _ (𝒰.f i)
290+
IsZariskiLocalAtTarget P := by
291+
refine .mk_of_iff_of_zeroHypercover fun {X Y} f 𝒰 ↦ ⟨fun hf i ↦ ?_, fun h ↦ ?_⟩
292+
· apply hP _ (𝒰.f i)
292293
rw [← pullback.condition]
293294
exact IsZariskiLocalAtSource.comp hf _
294-
of_zeroHypercover {X Y} f 𝒰 h := by
295-
rw [P.iff_of_zeroHypercover_source (𝒰.pullback₁ f)]
295+
· rw [P.iff_of_zeroHypercover_source (𝒰.pullback₁ f)]
296296
intro i
297297
rw [← Scheme.Cover.pullbackHom_map]
298298
exact P.comp_mem _ _ (h i) (of_isOpenImmersion _)
@@ -646,13 +646,16 @@ theorem isStableUnderBaseChange (hP' : Q.IsStableUnderBaseChange) :
646646
lemma isZariskiLocalAtSource
647647
(H : ∀ {X Y : Scheme.{u}} (f : X ⟶ Y) [IsAffine Y] (𝒰 : Scheme.OpenCover.{u} X),
648648
Q f ↔ ∀ i, Q (𝒰.f i ≫ f)) : IsZariskiLocalAtSource P := by
649-
refine .mk_of_iff ?_
650-
intro X Y f 𝒰
651-
simp_rw [IsZariskiLocalAtTarget.iff_of_iSup_eq_top _ (iSup_affineOpens_eq_top Y)]
652-
rw [forall_comm]
653-
refine forall_congr' fun U ↦ ?_
654-
simp_rw [HasAffineProperty.iff_of_isAffine, morphismRestrict_comp]
655-
exact @H _ _ (f ∣_ U.1) U.2 (Scheme.OpenCover.restrict 𝒰 (f ⁻¹ᵁ U.1))
649+
refine .mk_of_small (fun {X Y f} 𝒰 hf ↦ ?_) (fun {X Y f} 𝒰 hf ↦ ?_) <;>
650+
simp_rw [IsZariskiLocalAtTarget.iff_of_iSup_eq_top _ (iSup_affineOpens_eq_top Y),
651+
HasAffineProperty.iff_of_isAffine, morphismRestrict_comp] at hf ⊢
652+
· intro i U
653+
let 𝒰' : X.OpenCover := (Scheme.Cover.ulift 𝒰).add (𝒰.f i)
654+
exact (H (f ∣_ U.1) (𝒰'.restrict _)).mp (hf _) none
655+
· intro U
656+
rw [H (f ∣_ U.1) (Scheme.OpenCover.restrict 𝒰 _)]
657+
intro i
658+
exact hf _ _
656659

657660
end HasAffineProperty
658661

Mathlib/AlgebraicGeometry/Morphisms/Constructors.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ theorem universally_isZariskiLocalAtTarget (P : MorphismProperty Scheme)
225225

226226
lemma universally_isZariskiLocalAtSource (P : MorphismProperty Scheme)
227227
[IsZariskiLocalAtSource P] : IsZariskiLocalAtSource P.universally := by
228-
refine .mk_of_iff ?_
228+
refine .mk_of_iff_of_zeroHypercover ?_
229229
intro X Y f 𝒰
230230
refine ⟨fun hf i ↦ ?_, fun hf ↦ ?_⟩
231231
· apply MorphismProperty.universally_mk'

Mathlib/AlgebraicGeometry/Morphisms/LocalClosure.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@ instance [P.RespectsIso] : (sourceLocalClosure W P).RespectsIso where
7373

7474
instance [P.RespectsIso] [P.RespectsLeft @IsOpenImmersion] :
7575
IsZariskiLocalAtSource (sourceLocalClosure IsOpenImmersion P) := by
76-
refine .mk_of_iff fun f 𝒰 ↦ ?_
76+
refine .mk_of_iff_of_zeroHypercover fun f 𝒰 ↦ ?_
7777
refine ⟨fun ⟨𝒱, h⟩ ↦ fun i ↦ ⟨𝒱.pullback₁ (𝒰.f i), fun j ↦ ?_⟩, fun h ↦ ?_⟩
7878
· simpa [pullback.condition_assoc] using
7979
RespectsLeft.precomp (Q := @IsOpenImmersion) _ inferInstance _ (h j)
8080
· choose 𝒱 h𝒱 using h
81-
exact ⟨𝒰.bind 𝒱, fun i ↦ h𝒱 _ _⟩
81+
exact ⟨(Scheme.Cover.ulift 𝒰).bind (fun i ↦ Scheme.Cover.ulift (𝒱 _)), fun i ↦ h𝒱 _ _⟩
8282

8383
instance [P.IsStableUnderBaseChange] : (sourceLocalClosure W P).IsStableUnderBaseChange := by
8484
refine .mk' fun X Y S f g _ ⟨𝒰, hg⟩ ↦ ⟨𝒰.pullback₁ (pullback.snd f g), fun i ↦ ?_⟩

Mathlib/AlgebraicGeometry/Restrict.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -854,7 +854,7 @@ set_option backward.isDefEq.respectTransparency false in
854854
/-- The restriction of an open cover to an open subset. -/
855855
@[simps! I₀ X f]
856856
noncomputable
857-
def Scheme.OpenCover.restrict {X : Scheme.{u}} (𝒰 : X.OpenCover) (U : Opens X) :
857+
def Scheme.OpenCover.restrict {X : Scheme.{u}} (𝒰 : Scheme.OpenCover.{v} X) (U : Opens X) :
858858
U.toScheme.OpenCover := by
859859
refine Cover.copy (𝒰.pullback₁ U.ι) 𝒰.I₀ _ (𝒰.f · ∣_ U) (Equiv.refl _)
860860
(fun i ↦ IsOpenImmersion.isoOfRangeEq (Opens.ι _) (pullback.snd _ _) ?_) ?_

0 commit comments

Comments
 (0)