Skip to content

Commit 66e9755

Browse files
committed
chore(AlgebraicGeometry/Morphisms): split basic file (#14297)
Moves constructors for properties from other properties in a new file. Removes `morphismRestrict_base` as it is a duplicate of `morphismRestrict_val_base`.
1 parent 7137d2e commit 66e9755

File tree

5 files changed

+263
-220
lines changed

5 files changed

+263
-220
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,7 @@ import Mathlib.AlgebraicGeometry.Modules.Presheaf
748748
import Mathlib.AlgebraicGeometry.Modules.Sheaf
749749
import Mathlib.AlgebraicGeometry.Morphisms.Basic
750750
import Mathlib.AlgebraicGeometry.Morphisms.ClosedImmersion
751+
import Mathlib.AlgebraicGeometry.Morphisms.Constructors
751752
import Mathlib.AlgebraicGeometry.Morphisms.FiniteType
752753
import Mathlib.AlgebraicGeometry.Morphisms.OpenImmersion
753754
import Mathlib.AlgebraicGeometry.Morphisms.QuasiCompact

Mathlib/AlgebraicGeometry/Morphisms/Basic.lean

Lines changed: 0 additions & 218 deletions
Original file line numberDiff line numberDiff line change
@@ -472,210 +472,6 @@ theorem IsLocal.stableUnderBaseChange {P : AffineTargetMorphismProperty} (hP : P
472472

473473
end AffineTargetMorphismProperty
474474

475-
/-- The `AffineTargetMorphismProperty` associated to `(targetAffineLocally P).diagonal`.
476-
See `diagonal_targetAffineLocally_eq_targetAffineLocally`.
477-
-/
478-
def AffineTargetMorphismProperty.diagonal (P : AffineTargetMorphismProperty) :
479-
AffineTargetMorphismProperty :=
480-
fun {X _} f _ =>
481-
∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [IsAffine U₁] [IsAffine U₂] [IsOpenImmersion f₁]
482-
[IsOpenImmersion f₂], P (pullback.mapDesc f₁ f₂ f)
483-
#align algebraic_geometry.affine_target_morphism_property.diagonal AlgebraicGeometry.AffineTargetMorphismProperty.diagonal
484-
485-
theorem AffineTargetMorphismProperty.diagonal_respectsIso (P : AffineTargetMorphismProperty)
486-
(hP : P.toProperty.RespectsIso) : P.diagonal.toProperty.RespectsIso := by
487-
delta AffineTargetMorphismProperty.diagonal
488-
apply AffineTargetMorphismProperty.respectsIso_mk
489-
· introv H _ _
490-
rw [pullback.mapDesc_comp, affine_cancel_left_isIso hP, affine_cancel_right_isIso hP]
491-
-- Porting note: add the following two instances
492-
have i1 : IsOpenImmersion (f₁ ≫ e.hom) := PresheafedSpace.IsOpenImmersion.comp _ _
493-
have i2 : IsOpenImmersion (f₂ ≫ e.hom) := PresheafedSpace.IsOpenImmersion.comp _ _
494-
apply H
495-
· introv H _ _
496-
-- Porting note: add the following two instances
497-
have _ : IsAffine Z := isAffine_of_isIso e.inv
498-
rw [pullback.mapDesc_comp, affine_cancel_right_isIso hP]
499-
apply H
500-
#align algebraic_geometry.affine_target_morphism_property.diagonal_respects_iso AlgebraicGeometry.AffineTargetMorphismProperty.diagonal_respectsIso
501-
502-
theorem diagonal_targetAffineLocally_of_openCover
503-
(P : AffineTargetMorphismProperty) (hP : P.IsLocal)
504-
{X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.OpenCover.{u} Y) [∀ i, IsAffine (𝒰.obj i)]
505-
(𝒰' : ∀ i, Scheme.OpenCover.{u} (pullback f (𝒰.map i))) [∀ i j, IsAffine ((𝒰' i).obj j)]
506-
(h𝒰' : ∀ i j k, P (pullback.mapDesc ((𝒰' i).map j) ((𝒰' i).map k) pullback.snd)) :
507-
(targetAffineLocally P).diagonal f := by
508-
let 𝒱 := (Scheme.Pullback.openCoverOfBase 𝒰 f f).bind fun i =>
509-
Scheme.Pullback.openCoverOfLeftRight.{u} (𝒰' i) (𝒰' i) pullback.snd pullback.snd
510-
have i1 : ∀ i, IsAffine (𝒱.obj i) := fun i => by dsimp [𝒱]; infer_instance
511-
apply (hP.affine_openCover_iff _ 𝒱).mpr
512-
rintro ⟨i, j, k⟩
513-
dsimp [𝒱]
514-
convert (affine_cancel_left_isIso hP.1
515-
(pullbackDiagonalMapIso _ _ ((𝒰' i).map j) ((𝒰' i).map k)).inv pullback.snd).mp _
516-
pick_goal 3
517-
· convert h𝒰' i j k; apply pullback.hom_ext <;> simp
518-
all_goals apply pullback.hom_ext <;>
519-
simp only [Category.assoc, pullback.lift_fst, pullback.lift_snd, pullback.lift_fst_assoc,
520-
pullback.lift_snd_assoc]
521-
#align algebraic_geometry.diagonal_target_affine_locally_of_open_cover AlgebraicGeometry.diagonal_targetAffineLocally_of_openCover
522-
523-
theorem AffineTargetMorphismProperty.diagonal_of_targetAffineLocally
524-
(P : AffineTargetMorphismProperty) (hP : P.IsLocal) {X Y U : Scheme.{u}} (f : X ⟶ Y) (g : U ⟶ Y)
525-
[IsAffine U] [IsOpenImmersion g] (H : (targetAffineLocally P).diagonal f) :
526-
P.diagonal (pullback.snd : pullback f g ⟶ _) := by
527-
rintro U V f₁ f₂ hU hV hf₁ hf₂
528-
replace H := ((hP.affine_openCover_TFAE (pullback.diagonal f)).out 0 3).mp H
529-
let g₁ := pullback.map (f₁ ≫ pullback.snd) (f₂ ≫ pullback.snd) f f
530-
(f₁ ≫ pullback.fst) (f₂ ≫ pullback.fst) g
531-
(by rw [Category.assoc, Category.assoc, pullback.condition])
532-
(by rw [Category.assoc, Category.assoc, pullback.condition])
533-
specialize H g₁
534-
rw [← affine_cancel_left_isIso hP.1 (pullbackDiagonalMapIso f _ f₁ f₂).hom]
535-
convert H
536-
apply pullback.hom_ext <;>
537-
simp only [Category.assoc, pullback.lift_fst, pullback.lift_snd, pullback.lift_fst_assoc,
538-
pullback.lift_snd_assoc, Category.comp_id, pullbackDiagonalMapIso_hom_fst,
539-
pullbackDiagonalMapIso_hom_snd]
540-
#align algebraic_geometry.affine_target_morphism_property.diagonal_of_target_affine_locally AlgebraicGeometry.AffineTargetMorphismProperty.diagonal_of_targetAffineLocally
541-
542-
open List in
543-
theorem AffineTargetMorphismProperty.IsLocal.diagonal_affine_openCover_TFAE
544-
{P : AffineTargetMorphismProperty} (hP : P.IsLocal) {X Y : Scheme.{u}} (f : X ⟶ Y) :
545-
TFAE
546-
[(targetAffineLocally P).diagonal f,
547-
∃ (𝒰 : Scheme.OpenCover.{u} Y) (_ : ∀ i, IsAffine (𝒰.obj i)),
548-
∀ i : 𝒰.J, P.diagonal (pullback.snd : pullback f (𝒰.map i) ⟶ _),
549-
∀ (𝒰 : Scheme.OpenCover.{u} Y) [∀ i, IsAffine (𝒰.obj i)] (i : 𝒰.J),
550-
P.diagonal (pullback.snd : pullback f (𝒰.map i) ⟶ _),
551-
∀ {U : Scheme} (g : U ⟶ Y) [IsAffine U] [IsOpenImmersion g],
552-
P.diagonal (pullback.snd : pullback f g ⟶ _),
553-
∃ (𝒰 : Scheme.OpenCover.{u} Y) (_ : ∀ i, IsAffine (𝒰.obj i)) (𝒰' :
554-
∀ i, Scheme.OpenCover.{u} (pullback f (𝒰.map i))) (_ : ∀ i j, IsAffine ((𝒰' i).obj j)),
555-
∀ i j k, P (pullback.mapDesc ((𝒰' i).map j) ((𝒰' i).map k) pullback.snd)] := by
556-
tfae_have 14
557-
· introv H hU hg _ _; apply P.diagonal_of_targetAffineLocally <;> assumption
558-
tfae_have 43
559-
· introv H h𝒰; apply H
560-
tfae_have 32
561-
· exact fun H => ⟨Y.affineCover, inferInstance, H Y.affineCover⟩
562-
tfae_have 25
563-
· rintro ⟨𝒰, h𝒰, H⟩
564-
refine ⟨𝒰, inferInstance, fun _ => Scheme.affineCover _, inferInstance, ?_⟩
565-
intro i j k
566-
apply H
567-
tfae_have 51
568-
· rintro ⟨𝒰, _, 𝒰', _, H⟩
569-
exact diagonal_targetAffineLocally_of_openCover P hP f 𝒰 𝒰' H
570-
tfae_finish
571-
#align algebraic_geometry.affine_target_morphism_property.is_local.diagonal_affine_open_cover_tfae AlgebraicGeometry.AffineTargetMorphismProperty.IsLocal.diagonal_affine_openCover_TFAE
572-
573-
theorem AffineTargetMorphismProperty.IsLocal.diagonal {P : AffineTargetMorphismProperty}
574-
(hP : P.IsLocal) : P.diagonal.IsLocal :=
575-
AffineTargetMorphismProperty.isLocalOfOpenCoverImply P.diagonal (P.diagonal_respectsIso hP.1)
576-
fun {_ _} f => ((hP.diagonal_affine_openCover_TFAE f).out 1 3).mp
577-
#align algebraic_geometry.affine_target_morphism_property.is_local.diagonal AlgebraicGeometry.AffineTargetMorphismProperty.IsLocal.diagonal
578-
579-
theorem diagonal_targetAffineLocally_eq_targetAffineLocally (P : AffineTargetMorphismProperty)
580-
(hP : P.IsLocal) : (targetAffineLocally P).diagonal = targetAffineLocally P.diagonal := by
581-
ext _ _ f
582-
exact ((hP.diagonal_affine_openCover_TFAE f).out 0 1).trans
583-
((hP.diagonal.affine_openCover_TFAE f).out 1 0)
584-
#align algebraic_geometry.diagonal_target_affine_locally_eq_target_affine_locally AlgebraicGeometry.diagonal_targetAffineLocally_eq_targetAffineLocally
585-
586-
theorem universally_isLocalAtTarget (P : MorphismProperty Scheme)
587-
(hP : ∀ {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.OpenCover.{u} Y),
588-
(∀ i : 𝒰.J, P (pullback.snd : (𝒰.pullbackCover f).obj i ⟶ 𝒰.obj i)) → P f) :
589-
PropertyIsLocalAtTarget P.universally := by
590-
refine ⟨P.universally_respectsIso, fun {X Y} f U =>
591-
P.universally_stableUnderBaseChange (isPullback_morphismRestrict f U).flip, ?_⟩
592-
intro X Y f 𝒰 h X' Y' i₁ i₂ f' H
593-
apply hP _ (𝒰.pullbackCover i₂)
594-
intro i
595-
dsimp
596-
apply h i (pullback.lift (pullback.fst ≫ i₁) (pullback.snd ≫ pullback.snd) _) pullback.snd
597-
swap
598-
· rw [Category.assoc, Category.assoc, ← pullback.condition, ← pullback.condition_assoc, H.w]
599-
refine (IsPullback.of_right ?_ (pullback.lift_snd _ _ _) (IsPullback.of_hasPullback _ _)).flip
600-
rw [pullback.lift_fst, ← pullback.condition]
601-
exact (IsPullback.of_hasPullback _ _).paste_horiz H.flip
602-
#align algebraic_geometry.universally_is_local_at_target AlgebraicGeometry.universally_isLocalAtTarget
603-
604-
theorem universally_isLocalAtTarget_of_morphismRestrict (P : MorphismProperty Scheme)
605-
(hP₁ : P.RespectsIso)
606-
(hP₂ : ∀ {X Y : Scheme.{u}} (f : X ⟶ Y) {ι : Type u} (U : ι → Opens Y.carrier)
607-
(_ : iSup U = ⊤), (∀ i, P (f ∣_ U i)) → P f) : PropertyIsLocalAtTarget P.universally :=
608-
universally_isLocalAtTarget P (fun f 𝒰 h𝒰 => by
609-
apply hP₂ f (fun i : 𝒰.J => Scheme.Hom.opensRange (𝒰.map i)) 𝒰.iSup_opensRange
610-
simp_rw [hP₁.arrow_mk_iso_iff (morphismRestrictOpensRange f _)]
611-
exact h𝒰)
612-
#align algebraic_geometry.universally_is_local_at_target_of_morphism_restrict AlgebraicGeometry.universally_isLocalAtTarget_of_morphismRestrict
613-
614-
theorem morphismRestrict_base {X Y : Scheme} (f : X ⟶ Y) (U : Opens Y.carrier) :
615-
⇑(f ∣_ U).1.base = U.1.restrictPreimage f.1.1 :=
616-
funext fun x => Subtype.ext <| morphismRestrict_base_coe f U x
617-
#align algebraic_geometry.morphism_restrict_base AlgebraicGeometry.morphismRestrict_base
618-
619-
/-- `topologically P` holds for a morphism if the underlying topological map satisfies `P`. -/
620-
def MorphismProperty.topologically
621-
(P : ∀ {α β : Type u} [TopologicalSpace α] [TopologicalSpace β] (_ : α → β), Prop) :
622-
MorphismProperty Scheme.{u} := fun _ _ f => P f.1.base
623-
#align algebraic_geometry.morphism_property.topologically AlgebraicGeometry.MorphismProperty.topologically
624-
625-
variable (P : ∀ {α β : Type u} [TopologicalSpace α] [TopologicalSpace β] (_ : α → β), Prop)
626-
627-
/-- If a property of maps of topological spaces is stable under composition, the induced
628-
morphism property of schemes is stable under composition. -/
629-
lemma MorphismProperty.topologically_isStableUnderComposition
630-
(hP : ∀ {α β γ : Type u} [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
631-
(f : α → β) (g : β → γ) (_ : P f) (_ : P g), P (g ∘ f)) :
632-
(MorphismProperty.topologically P).IsStableUnderComposition where
633-
comp_mem {X Y Z} f g hf hg := by
634-
simp only [MorphismProperty.topologically, Scheme.comp_coeBase, TopCat.coe_comp]
635-
exact hP _ _ hf hg
636-
637-
/-- If a property of maps of topological spaces is satisfied by all homeomorphisms,
638-
every isomorphism of schemes satisfies the induced property. -/
639-
lemma MorphismProperty.topologically_iso_le
640-
(hP : ∀ {α β : Type u} [TopologicalSpace α] [TopologicalSpace β] (f : α ≃ₜ β), P f) :
641-
MorphismProperty.isomorphisms Scheme ≤ (MorphismProperty.topologically P) := by
642-
intro X Y e (he : IsIso e)
643-
have : IsIso e := he
644-
exact hP (TopCat.homeoOfIso (asIso e.val.base))
645-
646-
/-- If a property of maps of topological spaces is satisfied by homeomorphisms and is stable
647-
under composition, the induced property on schemes respects isomorphisms. -/
648-
lemma MorphismProperty.topologically_respectsIso
649-
(hP₁ : ∀ {α β : Type u} [TopologicalSpace α] [TopologicalSpace β] (f : α ≃ₜ β), P f)
650-
(hP₂ : ∀ {α β γ : Type u} [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ]
651-
(f : α → β) (g : β → γ) (_ : P f) (_ : P g), P (g ∘ f)) :
652-
(MorphismProperty.topologically P).RespectsIso :=
653-
have : (MorphismProperty.topologically P).IsStableUnderComposition :=
654-
topologically_isStableUnderComposition P hP₂
655-
MorphismProperty.respectsIso_of_isStableUnderComposition (topologically_iso_le P hP₁)
656-
657-
/-- To check that a topologically defined morphism property is local at the target,
658-
we may check the corresponding properties on topological spaces. -/
659-
lemma MorphismProperty.topologically_propertyIsLocalAtTarget
660-
(hP₁ : (MorphismProperty.topologically P).RespectsIso)
661-
(hP₂ : ∀ {α β : Type u} [TopologicalSpace α] [TopologicalSpace β] (f : α → β) (s : Set β),
662-
P f → P (s.restrictPreimage f))
663-
(hP₃ : ∀ {α β : Type u} [TopologicalSpace α] [TopologicalSpace β] (f : α → β) {ι : Type u}
664-
(U : ι → TopologicalSpace.Opens β) (_ : iSup U = ⊤) (_ : Continuous f),
665-
(∀ i, P ((U i).carrier.restrictPreimage f)) → P f) :
666-
PropertyIsLocalAtTarget (MorphismProperty.topologically P) := by
667-
apply propertyIsLocalAtTarget_of_morphismRestrict
668-
· exact hP₁
669-
· intro X Y f U hf
670-
simp_rw [MorphismProperty.topologically, morphismRestrict_base]
671-
exact hP₂ f.val.base U.carrier hf
672-
· intro X Y f ι U hU hf
673-
apply hP₃ f.val.base U hU
674-
· exact f.val.base.continuous
675-
· intro i
676-
rw [← morphismRestrict_base]
677-
exact hf i
678-
679475
namespace AffineTargetMorphismProperty.IsLocal
680476

681477
@[deprecated (since := "2024-06-22")]
@@ -687,18 +483,4 @@ alias targetAffineLocallyPullbackFstOfRightOfStableUnderBaseChange :=
687483

688484
end AffineTargetMorphismProperty.IsLocal
689485

690-
@[deprecated (since := "2024-06-22")]
691-
alias diagonalTargetAffineLocallyOfOpenCover := diagonal_targetAffineLocally_of_openCover
692-
693-
@[deprecated (since := "2024-06-22")]
694-
alias AffineTargetMorphismProperty.diagonalOfTargetAffineLocally :=
695-
AffineTargetMorphismProperty.diagonal_of_targetAffineLocally
696-
697-
@[deprecated (since := "2024-06-22")]
698-
alias universallyIsLocalAtTarget := universally_isLocalAtTarget
699-
700-
@[deprecated (since := "2024-06-22")]
701-
alias universallyIsLocalAtTargetOfMorphismRestrict :=
702-
universally_isLocalAtTarget_of_morphismRestrict
703-
704486
end AlgebraicGeometry

0 commit comments

Comments
 (0)