@@ -436,4 +436,128 @@ end
436436
437437end affine_target_morphism_property
438438
439+ /--
440+ The `affine_target_morphism_property` associated to `(target_affine_locally P).diagonal`.
441+ See `diagonal_target_affine_locally_eq_target_affine_locally`.
442+ -/
443+ def affine_target_morphism_property.diagonal (P : affine_target_morphism_property) :
444+ affine_target_morphism_property :=
445+ λ X Y f hf, ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [is_affine U₁] [is_affine U₂]
446+ [is_open_immersion f₁] [is_open_immersion f₂],
447+ by exactI P (pullback.map_desc f₁ f₂ f)
448+
449+ lemma affine_target_morphism_property.diagonal_respects_iso (P : affine_target_morphism_property)
450+ (hP : P.to_property.respects_iso) :
451+ P.diagonal.to_property.respects_iso :=
452+ begin
453+ delta affine_target_morphism_property.diagonal,
454+ apply affine_target_morphism_property.respects_iso_mk,
455+ { introv H _ _,
456+ resetI,
457+ rw [pullback.map_desc_comp, affine_cancel_left_is_iso hP, affine_cancel_right_is_iso hP],
458+ apply H },
459+ { introv H _ _,
460+ resetI,
461+ rw [pullback.map_desc_comp, affine_cancel_right_is_iso hP],
462+ apply H }
463+ end
464+
465+ lemma diagonal_target_affine_locally_of_open_cover (P : affine_target_morphism_property)
466+ (hP : P.is_local)
467+ {X Y : Scheme.{u}} (f : X ⟶ Y)
468+ (𝒰 : Scheme.open_cover.{u} Y)
469+ [∀ i, is_affine (𝒰.obj i)] (𝒰' : Π i, Scheme.open_cover.{u} (pullback f (𝒰.map i)))
470+ [∀ i j, is_affine ((𝒰' i).obj j)]
471+ (h𝒰' : ∀ i j k, P (pullback.map_desc ((𝒰' i).map j) ((𝒰' i).map k) pullback.snd)) :
472+ (target_affine_locally P).diagonal f :=
473+ begin
474+ refine (hP.affine_open_cover_iff _ _).mpr _,
475+ { exact ((Scheme.pullback.open_cover_of_base 𝒰 f f).bind (λ i,
476+ Scheme.pullback.open_cover_of_left_right.{u u} (𝒰' i) (𝒰' i) pullback.snd pullback.snd)) },
477+ { intro i,
478+ dsimp at *,
479+ apply_instance },
480+ { rintro ⟨i, j, k⟩,
481+ dsimp,
482+ convert (affine_cancel_left_is_iso hP.1
483+ (pullback_diagonal_map_iso _ _ ((𝒰' i).map j) ((𝒰' i).map k)).inv pullback.snd).mp _,
484+ swap 3 ,
485+ { convert h𝒰' i j k, apply pullback.hom_ext; simp, },
486+ all_goals
487+ { apply pullback.hom_ext; simp only [category.assoc, pullback.lift_fst, pullback.lift_snd,
488+ pullback.lift_fst_assoc, pullback.lift_snd_assoc] } }
489+ end
490+
491+ lemma affine_target_morphism_property.diagonal_of_target_affine_locally
492+ (P : affine_target_morphism_property)
493+ (hP : P.is_local) {X Y U : Scheme.{u}} (f : X ⟶ Y) (g : U ⟶ Y)
494+ [is_affine U] [is_open_immersion g] (H : (target_affine_locally P).diagonal f) :
495+ P.diagonal (pullback.snd : pullback f g ⟶ _) :=
496+ begin
497+ rintros U V f₁ f₂ _ _ _ _,
498+ resetI,
499+ replace H := ((hP.affine_open_cover_tfae (pullback.diagonal f)).out 0 3 ).mp H,
500+ let g₁ := pullback.map (f₁ ≫ pullback.snd)
501+ (f₂ ≫ pullback.snd) f f
502+ (f₁ ≫ pullback.fst)
503+ (f₂ ≫ pullback.fst) g
504+ (by rw [category.assoc, category.assoc, pullback.condition])
505+ (by rw [category.assoc, category.assoc, pullback.condition]),
506+ let g₂ : pullback f₁ f₂ ⟶ pullback f g := pullback.fst ≫ f₁,
507+ specialize H g₁,
508+ rw ← affine_cancel_left_is_iso hP.1 (pullback_diagonal_map_iso f _ f₁ f₂).hom,
509+ convert H,
510+ { apply pullback.hom_ext; simp only [category.assoc, pullback.lift_fst, pullback.lift_snd,
511+ pullback.lift_fst_assoc, pullback.lift_snd_assoc, category.comp_id,
512+ pullback_diagonal_map_iso_hom_fst, pullback_diagonal_map_iso_hom_snd], }
513+ end
514+
515+ lemma affine_target_morphism_property.is_local.diagonal_affine_open_cover_tfae
516+ {P : affine_target_morphism_property}
517+ (hP : P.is_local) {X Y : Scheme.{u}} (f : X ⟶ Y) :
518+ tfae [(target_affine_locally P).diagonal f,
519+ ∃ (𝒰 : Scheme.open_cover.{u} Y) [∀ i, is_affine (𝒰.obj i)], by exactI
520+ ∀ (i : 𝒰.J), P.diagonal (pullback.snd : pullback f (𝒰.map i) ⟶ _),
521+ ∀ (𝒰 : Scheme.open_cover.{u} Y) [∀ i, is_affine (𝒰.obj i)] (i : 𝒰.J), by exactI
522+ P.diagonal (pullback.snd : pullback f (𝒰.map i) ⟶ _),
523+ ∀ {U : Scheme} (g : U ⟶ Y) [is_affine U] [is_open_immersion g], by exactI
524+ P.diagonal (pullback.snd : pullback f g ⟶ _),
525+ ∃ (𝒰 : Scheme.open_cover.{u} Y) [∀ i, is_affine (𝒰.obj i)]
526+ (𝒰' : Π i, Scheme.open_cover.{u} (pullback f (𝒰.map i))) [∀ i j, is_affine ((𝒰' i).obj j)],
527+ by exactI ∀ i j k, P (pullback.map_desc ((𝒰' i).map j) ((𝒰' i).map k) pullback.snd)] :=
528+ begin
529+ tfae_have : 1 → 4 ,
530+ { introv H hU hg _ _, resetI, apply P.diagonal_of_target_affine_locally; assumption },
531+ tfae_have : 4 → 3 ,
532+ { introv H h𝒰, resetI, apply H },
533+ tfae_have : 3 → 2 ,
534+ { exact λ H, ⟨Y.affine_cover, infer_instance, H Y.affine_cover⟩ },
535+ tfae_have : 2 → 5 ,
536+ { rintro ⟨𝒰, h𝒰, H⟩,
537+ resetI,
538+ refine ⟨𝒰, infer_instance, λ _, Scheme.affine_cover _, infer_instance, _⟩,
539+ intros i j k,
540+ apply H },
541+ tfae_have : 5 → 1 ,
542+ { rintro ⟨𝒰, _, 𝒰', _, H⟩,
543+ exactI diagonal_target_affine_locally_of_open_cover P hP f 𝒰 𝒰' H, },
544+ tfae_finish
545+ end
546+
547+ lemma affine_target_morphism_property.is_local.diagonal {P : affine_target_morphism_property}
548+ (hP : P.is_local) : P.diagonal.is_local :=
549+ affine_target_morphism_property.is_local_of_open_cover_imply
550+ P.diagonal
551+ (P.diagonal_respects_iso hP.1 )
552+ (λ _ _ f, ((hP.diagonal_affine_open_cover_tfae f).out 1 3 ).mp)
553+
554+ lemma diagonal_target_affine_locally_eq_target_affine_locally (P : affine_target_morphism_property)
555+ (hP : P.is_local) :
556+ (target_affine_locally P).diagonal = target_affine_locally P.diagonal :=
557+ begin
558+ ext _ _ f,
559+ exact ((hP.diagonal_affine_open_cover_tfae f).out 0 1 ).trans
560+ ((hP.diagonal.affine_open_cover_tfae f).out 1 0 ),
561+ end
562+
439563end algebraic_geometry
0 commit comments