@@ -104,20 +104,31 @@ def bind (E : PreZeroHypercover.{w} T) (F : ∀ i, PreZeroHypercover.{w'} (E.X i
104104 X ij := (F ij.1 ).X ij.2
105105 f ij := (F ij.1 ).f ij.2 ≫ E.f ij.1
106106
107- /-- Replace the indexing type of a pre-`0`-hypercover . -/
107+ /-- Restrict the indexing type to `ι` by precomposing with a function `ι → E.I₀` . -/
108108@[simps]
109- def reindex (E : PreZeroHypercover.{w} T) {ι : Type w'} (e : ι ≃ E.I₀) :
109+ def restrictIndex (E : PreZeroHypercover.{w} T) {ι : Type w'} (f : ι → E.I₀) :
110110 PreZeroHypercover.{w'} T where
111111 I₀ := ι
112- X := E.X ∘ e
113- f i := E.f (e i)
112+ X := E.X ∘ f
113+ f i := E.f (f i)
114114
115115@[simp]
116- lemma presieve₀_reindex {ι : Type w'} (e : ι ≃ E.I₀) : (E.reindex e).presieve₀ = E.presieve₀ := by
116+ lemma presieve₀_restrictIndex_equiv {ι : Type w'} (e : ι ≃ E.I₀) :
117+ (E.restrictIndex e).presieve₀ = E.presieve₀ := by
117118 refine le_antisymm (fun Y g ⟨i⟩ ↦ ⟨e i⟩) fun Y g ⟨i⟩ ↦ ?_
118119 obtain ⟨i, rfl⟩ := e.surjective i
119120 exact ⟨i⟩
120121
122+ /-- Replace the indexing type of a pre-`0`-hypercover. -/
123+ @[simps!]
124+ def reindex (E : PreZeroHypercover.{w} T) {ι : Type w'} (e : ι ≃ E.I₀) :
125+ PreZeroHypercover.{w'} T :=
126+ E.restrictIndex e
127+
128+ @[simp]
129+ lemma presieve₀_reindex {ι : Type w'} (e : ι ≃ E.I₀) : (E.reindex e).presieve₀ = E.presieve₀ := by
130+ simp [reindex]
131+
121132/-- Pairwise intersection of two pre-`0`-hypercovers. -/
122133@[simps!]
123134noncomputable
@@ -416,6 +427,61 @@ def map (F : C ⥤ D) (E : ZeroHypercover.{w} J S) (h : J ≤ K.comap F) :
416427
417428end Functoriality
418429
430+ /--
431+ A `w`-`0`-hypercover `E` is `w'`-small if there exists an indexing type `ι` in `Type w'` and a
432+ restriction map `ι → E.I₀` such that the restriction of `E` to `ι` is still covering.
433+
434+ Note: This is weaker than `E.I₀` being `w'`-small. For example, every Zariski cover of
435+ `X : Scheme.{u}` is `u`-small, because `X` itself suffices as indexing type.
436+ -/
437+ protected class Small (E : ZeroHypercover.{w} J S) where
438+ exists_restrictIndex_mem (E) : ∃ (ι : Type w') (f : ι → E.I₀), (E.restrictIndex f).presieve₀ ∈ J S
439+
440+ instance (E : ZeroHypercover.{w} J S) [Small.{w'} E.I₀] : ZeroHypercover.Small.{w'} E where
441+ exists_restrictIndex_mem := ⟨_, (equivShrink E.I₀).symm, by simp [E.mem₀]⟩
442+
443+ /-- The `w'`-index type of a `w'`-small `0`-hypercover. -/
444+ def Small.Index (E : ZeroHypercover.{w} J S) [ZeroHypercover.Small.{w'} E] : Type w' :=
445+ (Small.exists_restrictIndex_mem E).choose
446+
447+ /-- The index restriction function of a small `0`-hypercover. -/
448+ noncomputable def Small.restrictFun (E : ZeroHypercover.{w} J S) [ZeroHypercover.Small.{w'} E] :
449+ Index E → E.I₀ :=
450+ (Small.exists_restrictIndex_mem E).choose_spec.choose
451+
452+ lemma Small.mem₀ (E : ZeroHypercover.{w} J S) [ZeroHypercover.Small.{w'} E] :
453+ (E.restrictIndex <| Small.restrictFun E).presieve₀ ∈ J S :=
454+ (Small.exists_restrictIndex_mem E).choose_spec.choose_spec
455+
456+ instance (E : ZeroHypercover.{w} J S) : ZeroHypercover.Small.{max u v} E where
457+ exists_restrictIndex_mem := by
458+ obtain ⟨ι, Y, f, h⟩ := E.presieve₀.exists_eq_ofArrows
459+ have (Z : C) (g : Z ⟶ S) (hg : Presieve.ofArrows Y f g) :
460+ ∃ (j : E.I₀) (h : Z = E.X j), g = eqToHom h ≫ E.f j := by
461+ obtain ⟨j⟩ : E.presieve₀ g := by rwa [h]
462+ use j, rfl
463+ simp
464+ choose j h₁ h₂ using this
465+ refine ⟨ι, fun i ↦ j _ _ (.mk i), ?_⟩
466+ convert E.mem₀
467+ exact le_antisymm (fun Z g ⟨i⟩ ↦ ⟨_⟩) (h ▸ fun Z g ⟨i⟩ ↦ .mk' i (h₁ _ _ _) (h₂ _ _ _))
468+
469+ /-- Restrict a `w'`-small `0`-hypercover to a `w'`-`0`-hypercover. -/
470+ @ [simps toPreZeroHypercover]
471+ noncomputable
472+ def restrictIndexOfSmall (E : ZeroHypercover.{w} J S) [ZeroHypercover.Small.{w'} E] :
473+ ZeroHypercover.{w'} J S where
474+ __ := E.toPreZeroHypercover.restrictIndex (Small.restrictFun E)
475+ mem₀ := Small.mem₀ E
476+
477+ instance (E : ZeroHypercover.{w} J S) [ZeroHypercover.Small.{w'} E] {T : C} (f : T ⟶ S)
478+ [IsStableUnderBaseChange.{w} J] [IsStableUnderBaseChange.{w'} J]
479+ [∀ (i : E.I₀), HasPullback f (E.f i)] :
480+ ZeroHypercover.Small.{w'} (E.pullback₁ f) := by
481+ use Small.Index E, Small.restrictFun E
482+ have _ (i) : HasPullback f (E.restrictIndexOfSmall.f i) := by dsimp; infer_instance
483+ exact ((restrictIndexOfSmall.{w'} E).pullback₁ f).mem₀
484+
419485end ZeroHypercover
420486
421487lemma mem_iff_exists_zeroHypercover {X : C} {R : Presieve X} :
@@ -424,6 +490,19 @@ lemma mem_iff_exists_zeroHypercover {X : C} {R : Presieve X} :
424490 obtain ⟨ι, Y, f, rfl⟩ := R.exists_eq_ofArrows
425491 use ⟨⟨ι, Y, f⟩, hR⟩
426492
493+ /-- A precoverage is `w`-small, if every `0`-hypercover is `w`-small. -/
494+ class Small (J : Precoverage C) : Prop where
495+ zeroHypercoverSmall : ∀ {S : C} (E : ZeroHypercover.{max u v} J S), ZeroHypercover.Small.{w'} E
496+
497+ instance (J : Precoverage C) [Small.{w} J] {S : C} (E : ZeroHypercover.{w'} J S) :
498+ ZeroHypercover.Small.{w} E := by
499+ have : ZeroHypercover.Small.{w} (ZeroHypercover.restrictIndexOfSmall.{max u v} E) :=
500+ Small.zeroHypercoverSmall _
501+ let E' := ZeroHypercover.restrictIndexOfSmall.{w}
502+ (ZeroHypercover.restrictIndexOfSmall.{max u v} E)
503+ use E'.I₀, ZeroHypercover.Small.restrictFun _ ∘ ZeroHypercover.Small.restrictFun _
504+ exact E'.mem₀
505+
427506end Precoverage
428507
429508end CategoryTheory
0 commit comments