@@ -287,168 +287,81 @@ instance (M : SheafOfModules.{u} R) [M.IsFinitePresentation] :
287287
288288section map
289289
290- set_option backward.isDefEq.respectTransparency false
291-
292- variable {J : GrothendieckTopology C}
293- {R : Sheaf J RingCat} [HasSheafify J AddCommGrpCat] [J.WEqualsLocallyBijective AddCommGrpCat]
294- [J.HasSheafCompose (forget₂ RingCat AddCommGrpCat)] {C' : Type u₂} [Category.{v₂, u₂} C']
295- {J' : GrothendieckTopology C'} {S : Sheaf J' RingCat.{u}} [HasSheafify J' AddCommGrpCat.{u}]
296- [J'.WEqualsLocallyBijective AddCommGrpCat.{u}]
297- [J'.HasSheafCompose (forget₂ RingCat.{u} AddCommGrpCat.{u})]
298- {M : SheafOfModules.{u} R}
299- (P : M.Presentation) (F : SheafOfModules.{u} R ⥤ SheafOfModules.{u} S)
300- [PreservesColimitsOfSize.{u, u} F]
301- (η : F.obj (unit R) ≅ unit S)
302- [∀ (X : C), (J.over X).HasSheafCompose (forget₂ RingCat AddCommGrpCat)]
303- [∀ (X : C), HasSheafify (J.over X) AddCommGrpCat]
304- [∀ (X : C), (J.over X).WEqualsLocallyBijective AddCommGrpCat]
305- [∀ (X : C'), (J'.over X).HasSheafCompose (forget₂ RingCat AddCommGrpCat)]
306- [∀ (X : C'), HasSheafify (J'.over X) AddCommGrpCat]
307- [∀ (X : C'), (J'.over X).WEqualsLocallyBijective AddCommGrpCat]
308-
309- noncomputable
310- def QuasicoherentData.pushforward
311- (G : C' ⥤ C) [G.IsContinuous J' J] [G.IsCocontinuous J' J]
312- (φ : S ⟶ (G.sheafPushforwardContinuous RingCat.{u} J' J).obj R)
313- [∀ (X : C') (Y : C) (f : G.obj X ⟶ Y),
314- (Over.post G ⋙ Over.map f).IsContinuous (J'.over X) (J.over Y)]
315- (h : ∀ (X : C') (Y : C) (f : G.obj X ⟶ Y),
290+ variable {D : Type u₂} [Category.{v₂, u₂} D] {K : GrothendieckTopology D}
291+ {S : Sheaf K RingCat.{u}} [∀ (X : D), (K.over X).WEqualsLocallyBijective AddCommGrpCat]
292+ [∀ (X : D), (K.over X).HasSheafCompose (forget₂ RingCat AddCommGrpCat)]
293+
294+ variable [J.HasSheafCompose (forget₂ RingCat AddCommGrpCat)]
295+ [K.HasSheafCompose (forget₂ RingCat.{u} AddCommGrpCat.{u})]
296+ [∀ (X : C), HasSheafify (J.over X) AddCommGrpCat.{u}]
297+ [∀ (X : D), HasSheafify (K.over X) AddCommGrpCat.{u}]
298+
299+ instance {G : C ⥤ D} (X : C) (Y : D) (f : G.obj X ⟶ Y)
300+ [(Over.post G).IsContinuous (J.over X) (K.over _)] :
301+ (Over.post G ⋙ Over.map f).IsContinuous (J.over X) (K.over Y) :=
302+ Functor.isContinuous_comp _ _ _ (K.over _) _
303+
304+ variable (G : D ⥤ C) [G.IsContinuous K J] [G.IsCocontinuous K J]
305+ (φ : S ⟶ (G.sheafPushforwardContinuous RingCat.{u} K J).obj R)
306+
307+ /-- The pushforward of `SheafOfModules.QuasicoherentData` along a continuous
308+ and cocontinuous functor. -/
309+ -- TODO: Remove the continuous assumption on `Over.post` here and below.
310+ @ [simps I X]
311+ noncomputable def QuasicoherentData.pushforward (η : (pushforward φ).obj (unit R) ≅ unit S)
312+ [∀ (X : D), (Over.post G).IsContinuous (K.over X) (J.over _)]
313+ (h : ∀ (X : D) (Y : C) (f : G.obj X ⟶ Y),
316314 PreservesColimitsOfSize.{u, u} <|
317315 pushforward.{u} (R := (R.over Y)) (F := Over.post (X := X) G ⋙ Over.map f)
318- (((Over.forget X).sheafPushforwardContinuous RingCat.{u} (J'.over X) J').map φ))
319- (η : (pushforward φ).obj (unit R) ≅ unit S)
316+ (((Over.forget X).sheafPushforwardContinuous RingCat.{u} (K.over X) K).map φ))
320317 {M : SheafOfModules.{u} R} (P : M.QuasicoherentData) :
321318 QuasicoherentData ((pushforward φ).obj M) where
322- I := Σ (X : C' ) (i : P.I), G.obj X ⟶ P.X i
319+ I := Σ (X : D ) (i : P.I), G.obj X ⟶ P.X i
323320 X i := i.1
324- coversTop := by
325- intro Y
326- refine J'.superset_covering ?_ <| G.cover_lift J' _ (P.coversTop (G.obj Y))
321+ coversTop Y := by
322+ refine K.superset_covering ?_ <| G.cover_lift K _ (P.coversTop (G.obj Y))
327323 intro Z g ⟨i, ⟨v⟩⟩
328324 exact ⟨⟨Z, i, v⟩, ⟨𝟙 _⟩⟩
329325 presentation i := by
330326 letI overS : SheafOfModules.{u} S ⥤ SheafOfModules.{u} (S.over i.1 ) :=
331327 SheafOfModules.pushforward (𝟙 _)
332328 letI G' := Over.post (X := i.1 ) G ⋙ Over.map i.2 .2
333329 letI ψ : S.over i.1 ⟶
334- (G'.sheafPushforwardContinuous RingCat.{u} (J' .over i.1 ) (J.over (P.X i.2 .1 ))).obj
330+ (G'.sheafPushforwardContinuous RingCat.{u} (K .over i.1 ) (J.over (P.X i.2 .1 ))).obj
335331 (R.over (P.X i.2 .1 )) :=
336- ((Over.forget i.1 ).sheafPushforwardContinuous RingCat.{u} (J' .over i.1 ) J' ).map φ
332+ ((Over.forget i.1 ).sheafPushforwardContinuous RingCat.{u} (K .over i.1 ) K ).map φ
337333 letI e : (SheafOfModules.pushforward ψ).obj (unit (R.over (P.X i.snd.fst))) ≅
338334 unit (S.over i.fst) := overS.mapIso η
339335 haveI : PreservesColimitsOfSize.{u, u, _} (SheafOfModules.pushforward ψ) := h _ _ _
340336 exact (P.presentation i.2 .1 ).map (SheafOfModules.pushforward ψ) e.symm
341337
342- omit [HasSheafify J AddCommGrpCat] [J.WEqualsLocallyBijective
343- AddCommGrpCat] [HasSheafify J' AddCommGrpCat] [J'.WEqualsLocallyBijective AddCommGrpCat] in
344- lemma isQuasicoherent_pushforward
345- (G : C' ⥤ C) [G.IsContinuous J' J] [G.IsCocontinuous J' J]
346- (φ : S ⟶ (G.sheafPushforwardContinuous RingCat.{u} J' J).obj R)
347- [∀ (X : C') (Y : C) (f : G.obj X ⟶ Y),
348- (Over.post G ⋙ Over.map f).IsContinuous (J'.over X) (J.over Y)]
349- (h : ∀ (X : C') (Y : C) (f : G.obj X ⟶ Y),
338+ lemma isQuasicoherent_pushforward (η : (pushforward φ).obj (unit R) ≅ unit S)
339+ [∀ (X : D), (Over.post G).IsContinuous (K.over X) (J.over _)]
340+ (h : ∀ (X : D) (Y : C) (f : G.obj X ⟶ Y),
350341 PreservesColimitsOfSize.{u, u} <|
351342 pushforward.{u} (R := (R.over Y)) (F := Over.post (X := X) G ⋙ Over.map f)
352- (((Over.forget X).sheafPushforwardContinuous RingCat.{u} (J'.over X) J').map φ))
353- (η : (pushforward φ).obj (unit R) ≅ unit S)
343+ (((Over.forget X).sheafPushforwardContinuous RingCat.{u} (K.over X) K).map φ))
354344 {M : SheafOfModules.{u} R} [IsQuasicoherent M] :
355345 IsQuasicoherent ((pushforward φ).obj M) :=
356- IsQuasicoherent.nonempty_quasicoherentData.some.pushforward G φ h η |>.isQuasicoherent
357-
358- lemma _root_.CategoryTheory.PreOneHypercover.sieve₀_map
359- {C D : Type *} [Category* C] [Category* D] (F : C ⥤ D) {S : C}
360- (E : PreOneHypercover.{w} S) :
361- (E.map F).sieve₀ = Sieve.functorPushforward _ E.sieve₀ := by
362- rw [PreZeroHypercover.sieve₀, Sieve.ofArrows, ← PreZeroHypercover.presieve₀,
363- PreOneHypercover.map_toPreZeroHypercover, PreZeroHypercover.presieve₀_map,
364- Sieve.generate_map_eq_functorPushforward]
365-
366- lemma coverPreserving_of_coverPreserving_comp {C D E : Type *} [Category* C] [Category* D]
367- [Category* E] (F : C ⥤ D) (G : D ⥤ E) (J : GrothendieckTopology C) (K : GrothendieckTopology D)
368- (T : GrothendieckTopology E) (h : CoverPreserving J T (F ⋙ G)) [G.IsCocontinuous K T]
369- [G.Full] [G.Faithful] :
370- CoverPreserving J K F where
371- cover_preserve {U} S hS := by
372- refine K.superset_covering ?_ (G.cover_lift K _ (h.cover_preserve hS))
373- rw [Sieve.functorPushforward_comp, Sieve.functorPullback_functorPushforward_eq G]
374-
375- lemma _root_.CategoryTheory.coverPreserving_of_preservesOneHypercovers {C : Type u₁} {D : Type *}
376- [Category.{v₁} C] [Category* D] (F : C ⥤ D) (J : GrothendieckTopology C)
377- (K : GrothendieckTopology D) [Functor.PreservesOneHypercovers.{max u₁ v₁} F J K] :
378- CoverPreserving J K F where
379- cover_preserve {U} S hS := by
380- let E := GrothendieckTopology.Cover.oneHypercover ⟨_, hS⟩
381- simpa [CategoryTheory.PreZeroHypercover.sieve₀_map, E] using (E.map F K).mem₀
382-
383- instance {C : Type*} [Category* C] {A : Type *} [Category* A]
384- (J : GrothendieckTopology C) {F G : Sheaf J A} (f : F ⟶ G) [IsIso f] :
385- IsIso f.hom := by
386- refine ⟨(inv f).hom, ?_, ?_⟩
387- · simp [IsIso.hom_inv_id]
388- · simp [IsIso.inv_hom_id]
389-
390- set_option backward.defeqAttrib.useBackward true in
391- omit
392- [HasSheafify J AddCommGrpCat]
393- [J.WEqualsLocallyBijective AddCommGrpCat]
394- [J.HasSheafCompose (forget₂ RingCat AddCommGrpCat)]
395- [HasSheafify J' AddCommGrpCat]
396- [J'.WEqualsLocallyBijective AddCommGrpCat]
397- [J'.HasSheafCompose (forget₂ RingCat AddCommGrpCat)]
398- [∀ (X : C), (J.over X).HasSheafCompose (forget₂ RingCat AddCommGrpCat)]
399- [∀ (X : C), HasSheafify (J.over X) AddCommGrpCat]
400- [∀ (X : C), (J.over X).WEqualsLocallyBijective AddCommGrpCat]
401- [∀ (X : C'), (J'.over X).HasSheafCompose (forget₂ RingCat AddCommGrpCat)]
402- [∀ (X : C'), HasSheafify (J'.over X) AddCommGrpCat]
403- [∀ (X : C'), (J'.over X).WEqualsLocallyBijective AddCommGrpCat] in
404- lemma isLeftAdjoint_pushforward_of_isIso (G : C' ⥤ C) [G.IsContinuous J' J] [G.IsCocontinuous J' J]
405- (φ : S ⟶ (G.sheafPushforwardContinuous RingCat.{u} J' J).obj R) [IsIso φ]
406- [G.IsLeftAdjoint] :
407- (pushforward.{u} φ).IsLeftAdjoint := by
408- let adj := Adjunction.ofIsLeftAdjoint G
409- let shAdj := adj.sheafPushforwardContinuous (E := RingCat.{u}) J' J
410- let ψ : R ⟶ (G.rightAdjoint.sheafPushforwardContinuous RingCat.{u} J J').obj S :=
411- shAdj.unit.app R ≫ (G.rightAdjoint.sheafPushforwardContinuous _ _ _).map (inv φ)
412- let adj := by
413- refine SheafOfModules.pushforwardPushforwardAdj adj φ ψ ?_ ?_
414- · ext U : 2
415- simp [ψ, shAdj]
416- · ext U : 2
417- have := (inv φ).hom.naturality
418- simp only [Functor.sheafPushforwardContinuous_obj_obj_obj,
419- Functor.sheafPushforwardContinuous_obj_obj_map, ObjectProperty.hom_inv,
420- NatIso.isIso_inv_app, IsIso.eq_inv_comp] at this
421- simp [ψ, shAdj, ← this, ← Functor.map_comp_assoc, ← op_comp]
422- exact adj.isLeftAdjoint
423-
424- instance {C : Type*} [Category* C] [HasPullbacks C] {X Y : C} (f : X ⟶ Y) :
425- (Over.map f).IsLeftAdjoint :=
426- (Over.mapPullbackAdj f).isLeftAdjoint
346+ IsQuasicoherent.nonempty_quasicoherentData.some.pushforward G φ η h |>.isQuasicoherent
427347
428348set_option backward.isDefEq.respectTransparency false in
429- omit [HasSheafify J AddCommGrpCat] [J.WEqualsLocallyBijective AddCommGrpCat]
430- [HasSheafify J' AddCommGrpCat] [J'.WEqualsLocallyBijective AddCommGrpCat] in
431- lemma isQuasicoherent_pushforward_of_isLeftAdjoint (G : C' ⥤ C) [G.IsLeftAdjoint]
432- [G.IsContinuous J' J] [G.IsCocontinuous J' J]
433- (φ : S ⟶ (G.sheafPushforwardContinuous RingCat.{u} J' J).obj R) [IsIso φ]
434- [∀ X, Functor.IsContinuous (Over.post (X := X) G) (J'.over _) (J.over _)]
435- [HasPullbacks C] [HasPullbacks C']
436- (η : (pushforward φ).obj (unit R) ≅ unit S)
349+ lemma isQuasicoherent_pushforward_of_isLeftAdjoint (η : (pushforward φ).obj (unit R) ≅ unit S)
350+ [G.IsLeftAdjoint] [IsIso φ]
351+ [∀ X, Functor.IsContinuous (Over.post (X := X) G) (K.over _) (J.over _)]
352+ [HasPullbacks C] [HasPullbacks D]
437353 {M : SheafOfModules.{u} R} [IsQuasicoherent M] :
438354 IsQuasicoherent ((pushforward φ).obj M) := by
439- convert isQuasicoherent_pushforward G φ _ η
440- · intro X Y f
441- apply Functor.isContinuous_comp _ _ _ (J.over _) _
442- · intro X Y f
443- let G' := Over.post (X := X) G ⋙ Over.map f
444- have : G'.IsContinuous (J'.over X) (J.over Y) := Functor.isContinuous_comp _ _ _ (J.over _) _
445- have : G'.IsCocontinuous (J'.over X) (J.over Y) := isCocontinuous_comp _ _ _ (J.over _)
446- let a : S.over X ⟶
447- (G'.sheafPushforwardContinuous RingCat.{u} (J'.over X) (J.over Y)).obj (R.over Y) :=
448- ((Over.forget X).sheafPushforwardContinuous RingCat.{u} (J'.over X) J').map φ
449- have : (pushforward.{u} a).IsLeftAdjoint := isLeftAdjoint_pushforward_of_isIso _ _
450- infer_instance
451- · infer_instance
355+ apply +allowSynthFailures isQuasicoherent_pushforward G φ η _
356+ intro X Y f
357+ let G' := Over.post (X := X) G ⋙ Over.map f
358+ have : G'.IsContinuous (K.over X) (J.over Y) := Functor.isContinuous_comp _ _ _ (J.over _) _
359+ have : G'.IsCocontinuous (K.over X) (J.over Y) := isCocontinuous_comp _ _ _ (J.over _)
360+ let a : S.over X ⟶
361+ (G'.sheafPushforwardContinuous RingCat.{u} (K.over X) (J.over Y)).obj (R.over Y) :=
362+ ((Over.forget X).sheafPushforwardContinuous RingCat.{u} (K.over X) K).map φ
363+ have : (pushforward.{u} a).IsLeftAdjoint := isLeftAdjoint_pushforward_of_isIso a
364+ infer_instance
452365
453366end map
454367
@@ -545,8 +458,6 @@ lemma IsQuasicoherent.of_coversTop {R : Sheaf J RingCat.{u}}
545458 (QuasicoherentData.bind M X hX fun _ ↦
546459 IsQuasicoherent.nonempty_quasicoherentData.some).isQuasicoherent
547460
548- set_option backward.isDefEq.respectTransparency false
549-
550461set_option backward.isDefEq.respectTransparency false in
551462lemma isQuasicoherent_over [J.HasSheafCompose (forget₂ RingCat.{u} AddCommGrpCat.{u})]
552463 [HasPullbacks C] [HasBinaryProducts C] (M : SheafOfModules.{u} R) (X : C) [IsQuasicoherent M] :
0 commit comments