algebraic_geometry.morphisms.ring_hom_properties
⟷
Mathlib.AlgebraicGeometry.Morphisms.RingHomProperties
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -257,7 +257,7 @@ theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.Respe
#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.scheme_restrict_basicOpen_of_localizationPreserves
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
#print AlgebraicGeometry.sourceAffineLocally_isLocal /-
theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso @P)
(h₂ : RingHom.LocalizationPreserves @P) (h₃ : RingHom.OfLocalizationSpan @P) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -105,7 +105,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
simp only [Set.image_univ, Subtype.range_coe, Set.image_subset_iff]
rfl
· exact AlgebraicGeometry.Γ_restrict_isLocalization Y r
- · rw [← U.open_embedding_obj_top] at hU
+ · rw [← U.open_embedding_obj_top] at hU
dsimp [Scheme.Γ_obj_op, Scheme.Γ_map_op, Scheme.restrict]
apply AlgebraicGeometry.IsAffineOpen.isLocalization_of_eq_basicOpen _ hU
rw [opens.open_embedding_obj_top, opens.functor_obj_map_obj]
@@ -139,10 +139,10 @@ theorem StableUnderBaseChange.Γ_pullback_fst (hP : StableUnderBaseChange @P) (h
_root_.congr_arg Quiver.Hom.unop
(preserves_pullback.iso_hom_fst AffineScheme.Γ.right_op (AffineScheme.of_hom f)
(AffineScheme.of_hom g))
- simp only [Quiver.Hom.unop_op, functor.right_op_map, unop_comp] at this
- delta AffineScheme.Γ at this
+ simp only [Quiver.Hom.unop_op, functor.right_op_map, unop_comp] at this
+ delta AffineScheme.Γ at this
simp only [Quiver.Hom.unop_op, functor.comp_map, AffineScheme.forget_to_Scheme_map,
- functor.op_map] at this
+ functor.op_map] at this
rw [← this, hP'.cancel_right_is_iso, ←
pushout_iso_unop_pullback_inl_hom (Quiver.Hom.unop _) (Quiver.Hom.unop _),
hP'.cancel_right_is_iso]
@@ -216,7 +216,7 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
ext1; refine' set.image_preimage_eq_inter_range.trans (set.inter_eq_left_iff_subset.mpr _)
convert e; exact Subtype.range_coe
have := H ⟨(opens.map (X.of_restrict U'.open_embedding).1.base).obj V.1, _⟩
- erw [← X.presheaf.map_comp] at this
+ erw [← X.presheaf.map_comp] at this
rw [← hP.cancel_right_is_iso _ (X.presheaf.map (eq_to_hom _)), category.assoc, ←
X.presheaf.map_comp]
convert this using 1
@@ -271,7 +271,7 @@ theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso @P)
apply h₃ _ _ hs
intro r
have := hs' r ⟨(opens.map (X.of_restrict _).1.base).obj U.1, _⟩
- rwa [h₁.of_restrict_morphism_restrict_iff] at this
+ rwa [h₁.of_restrict_morphism_restrict_iff] at this
· exact U.2
· rfl
· infer_instance
@@ -280,7 +280,7 @@ theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso @P)
is_affine_open ((opens.map (X.of_restrict V.OpenEmbedding).1.base).obj U.1)
by exact this _ rfl
intro V hV
- rw [Scheme.preimage_basic_open] at hV
+ rw [Scheme.preimage_basic_open] at hV
subst hV
exact U.2.mapRestrictBasicOpen (Scheme.Γ.map f.op r.1)
#align algebraic_geometry.source_affine_locally_is_local AlgebraicGeometry.sourceAffineLocally_isLocal
@@ -295,8 +295,8 @@ theorem sourceAffineLocally_of_source_open_cover_aux (h₁ : RingHom.RespectsIso
(hs' : ∀ r : s, P (Scheme.Γ.map (X.of_restrict (X.basicOpen r.1).OpenEmbedding ≫ f).op)) :
P (Scheme.Γ.map (X.of_restrict U.1.OpenEmbedding ≫ f).op) :=
by
- apply_fun Ideal.map (X.presheaf.map (eq_to_hom U.1.openEmbedding_obj_top).op) at hs
- rw [Ideal.map_span, Ideal.map_top] at hs
+ apply_fun Ideal.map (X.presheaf.map (eq_to_hom U.1.openEmbedding_obj_top).op) at hs
+ rw [Ideal.map_span, Ideal.map_top] at hs
apply h₃ _ _ hs
rintro ⟨s, r, hr, hs⟩
have :=
@@ -385,7 +385,7 @@ theorem sourceAffineLocally_of_source_openCover {X Y : Scheme} (f : X ⟶ Y) [Is
· exact (RingHom.algebraMap_toAlgebra _).symm
· dsimp [Scheme.Γ]
have := U.2
- rw [← U.1.openEmbedding_obj_top] at this
+ rw [← U.1.openEmbedding_obj_top] at this
convert is_localization_basic_open this _ using 6 <;> rw [opens.open_embedding_obj_top] <;>
exact (Scheme.basic_open_res_eq _ _ _).symm
· introv hs hs'
@@ -401,9 +401,9 @@ theorem sourceAffineLocally_of_source_openCover {X Y : Scheme} (f : X ⟶ Y) [Is
(Scheme.Γ.map
(is_open_immersion.iso_of_range_eq (𝒰.map i) (X.of_restrict (S i).1.OpenEmbedding)
subtype.range_coe.symm).inv.op)] at
- H
+ H
rwa [← Scheme.Γ.map_comp, ← op_comp, is_open_immersion.iso_of_range_eq_inv,
- is_open_immersion.lift_fac_assoc] at H
+ is_open_immersion.lift_fac_assoc] at H
#align ring_hom.property_is_local.source_affine_locally_of_source_open_cover RingHom.PropertyIsLocal.sourceAffineLocally_of_source_openCover
-/
@@ -428,8 +428,8 @@ theorem affine_openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
(is_open_immersion.iso_of_range_eq g
(X.of_restrict (opens.open_embedding ⟨_, hg.base_open.open_range⟩))
subtype.range_coe.symm).Hom.op),
- ← Scheme.Γ.map_comp, ← op_comp, is_open_immersion.iso_of_range_eq_hom] at H
- erw [is_open_immersion.lift_fac_assoc] at H
+ ← Scheme.Γ.map_comp, ← op_comp, is_open_immersion.iso_of_range_eq_hom] at H
+ erw [is_open_immersion.lift_fac_assoc] at H
exact H
tfae_have 4 → 3
· intro H 𝒰 _ i; skip; apply H
@@ -453,7 +453,7 @@ theorem openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
tfae_have 1 → 4
· intro H U g hg V
skip
- rw [(hP.affine_open_cover_tfae f).out 0 3] at H
+ rw [(hP.affine_open_cover_tfae f).out 0 3] at H
haveI : is_affine _ := V.2
rw [← category.assoc]
apply H
@@ -468,7 +468,7 @@ theorem openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
· intro i; dsimp; infer_instance
· intro i
specialize h𝒰 i.1
- rw [(hP.affine_open_cover_tfae (𝒰.map i.fst ≫ f)).out 0 3] at h𝒰
+ rw [(hP.affine_open_cover_tfae (𝒰.map i.fst ≫ f)).out 0 3] at h𝒰
erw [category.assoc]
apply @h𝒰 _ (show _ from _)
dsimp; infer_instance
@@ -535,12 +535,12 @@ theorem source_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.Ope
use 𝒰.pullback_cover (X.of_restrict _)
intro i
specialize H i U
- rw [morphism_restrict_comp] at H
- delta morphism_restrict at H
+ rw [morphism_restrict_comp] at H
+ delta morphism_restrict at H
have := source_affine_locally_respects_iso hP.respects_iso
rw [category.assoc, affine_cancel_left_is_iso this, ←
affine_cancel_left_is_iso this (pullback_symmetry _ _).Hom,
- pullback_symmetry_hom_comp_snd_assoc] at H
+ pullback_symmetry_hom_comp_snd_assoc] at H
exact H
#align ring_hom.property_is_local.source_open_cover_iff RingHom.PropertyIsLocal.source_openCover_iff
-/
@@ -584,16 +584,16 @@ theorem affineLocally_of_comp
let 𝒰' := (Z.affine_cover.pullback_cover g).bind fun i => Scheme.affine_cover _
have h𝒰' : ∀ i, is_affine (𝒰'.obj i) := by dsimp; infer_instance
rw [hP.affine_open_cover_iff f 𝒰' fun i => Scheme.affine_cover _]
- rw [hP.affine_open_cover_iff (f ≫ g) Z.affine_cover 𝒰] at h
+ rw [hP.affine_open_cover_iff (f ≫ g) Z.affine_cover 𝒰] at h
rintro ⟨i, j⟩ k
- dsimp at i j k
+ dsimp at i j k
specialize h i ⟨j, k⟩
dsimp only [Scheme.open_cover.bind_map, Scheme.open_cover.pushforward_iso_obj,
Scheme.pullback.open_cover_of_right_obj, Scheme.open_cover.pushforward_iso_map,
Scheme.pullback.open_cover_of_right_map, Scheme.open_cover.bind_obj,
Scheme.open_cover.pullback_cover_obj, Scheme.open_cover.pullback_cover_map] at h ⊢
rw [category.assoc, category.assoc, pullback_right_pullback_fst_iso_hom_snd,
- pullback.lift_snd_assoc, category.assoc, ← category.assoc, op_comp, functor.map_comp] at h
+ pullback.lift_snd_assoc, category.assoc, ← category.assoc, op_comp, functor.map_comp] at h
exact H _ _ h
#align ring_hom.property_is_local.affine_locally_of_comp RingHom.PropertyIsLocal.affineLocally_of_comp
-/
@@ -616,7 +616,7 @@ theorem affineLocally_stableUnderComposition : (affineLocally @P).StableUnderCom
· exact 𝒰
· intro i j; dsimp at *; infer_instance
· rintro i ⟨j, k⟩
- dsimp at i j k
+ dsimp at i j k
dsimp only [Scheme.open_cover.bind_map, Scheme.open_cover.pushforward_iso_obj,
Scheme.pullback.open_cover_of_right_obj, Scheme.open_cover.pushforward_iso_map,
Scheme.pullback.open_cover_of_right_map, Scheme.open_cover.bind_obj]
@@ -624,15 +624,15 @@ theorem affineLocally_stableUnderComposition : (affineLocally @P).StableUnderCom
pullback.lift_snd_assoc, category.assoc, ← category.assoc, op_comp, functor.map_comp]
apply hP.stable_under_composition
· exact (hP.affine_open_cover_iff _ _ _).mp hg _ _
- · delta affine_locally at hf
- rw [(hP.is_local_source_affine_locally.affine_open_cover_tfae f).out 0 3] at hf
+ · delta affine_locally at hf
+ rw [(hP.is_local_source_affine_locally.affine_open_cover_tfae f).out 0 3] at hf
specialize hf ((pullback g (S.affine_cover.map i)).affineCover.map j ≫ pullback.fst)
rw [(hP.affine_open_cover_tfae
(pullback.snd :
pullback f ((pullback g (S.affine_cover.map i)).affineCover.map j ≫ pullback.fst) ⟶
_)).out
0 3] at
- hf
+ hf
apply hf
#align ring_hom.property_is_local.affine_locally_stable_under_composition RingHom.PropertyIsLocal.affineLocally_stableUnderComposition
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -107,7 +107,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
· exact AlgebraicGeometry.Γ_restrict_isLocalization Y r
· rw [← U.open_embedding_obj_top] at hU
dsimp [Scheme.Γ_obj_op, Scheme.Γ_map_op, Scheme.restrict]
- apply AlgebraicGeometry.isLocalization_of_eq_basicOpen _ hU
+ apply AlgebraicGeometry.IsAffineOpen.isLocalization_of_eq_basicOpen _ hU
rw [opens.open_embedding_obj_top, opens.functor_obj_map_obj]
convert (X.basic_open_res (Scheme.Γ.map f.op r) (hom_of_le le_top).op).symm using 1
rw [opens.open_embedding_obj_top, opens.open_embedding_obj_top, inf_comm, Scheme.Γ_map_op, ←
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2022 Andrew Yang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-/
-import Mathbin.AlgebraicGeometry.Morphisms.Basic
-import Mathbin.RingTheory.LocalProperties
+import AlgebraicGeometry.Morphisms.Basic
+import RingTheory.LocalProperties
#align_import algebraic_geometry.morphisms.ring_hom_properties from "leanprover-community/mathlib"@"08b081ea92d80e3a41f899eea36ef6d56e0f1db0"
@@ -257,7 +257,7 @@ theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.Respe
#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.scheme_restrict_basicOpen_of_localizationPreserves
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
#print AlgebraicGeometry.sourceAffineLocally_isLocal /-
theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso @P)
(h₂ : RingHom.LocalizationPreserves @P) (h₃ : RingHom.OfLocalizationSpan @P) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2022 Andrew Yang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module algebraic_geometry.morphisms.ring_hom_properties
-! leanprover-community/mathlib commit 08b081ea92d80e3a41f899eea36ef6d56e0f1db0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.AlgebraicGeometry.Morphisms.Basic
import Mathbin.RingTheory.LocalProperties
+#align_import algebraic_geometry.morphisms.ring_hom_properties from "leanprover-community/mathlib"@"08b081ea92d80e3a41f899eea36ef6d56e0f1db0"
+
/-!
# Properties of morphisms from properties of ring homs.
@@ -260,7 +257,7 @@ theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.Respe
#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.scheme_restrict_basicOpen_of_localizationPreserves
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
#print AlgebraicGeometry.sourceAffineLocally_isLocal /-
theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso @P)
(h₂ : RingHom.LocalizationPreserves @P) (h₃ : RingHom.OfLocalizationSpan @P) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/bf2428c9486c407ca38b5b3fb10b87dad0bc99fa
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
! This file was ported from Lean 3 source module algebraic_geometry.morphisms.ring_hom_properties
-! leanprover-community/mathlib commit d39590fc8728fbf6743249802486f8c91ffe07bc
+! leanprover-community/mathlib commit 08b081ea92d80e3a41f899eea36ef6d56e0f1db0
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -15,6 +15,9 @@ import Mathbin.RingTheory.LocalProperties
# Properties of morphisms from properties of ring homs.
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We provide the basic framework for talking about properties of morphisms that come from properties
of ring homs. For `P` a property of ring homs, we have two ways of defining a property of scheme
morphisms:
mathlib commit https://github.com/leanprover-community/mathlib/commit/2fe465deb81bcd7ccafa065bb686888a82f15372
@@ -48,6 +48,7 @@ namespace RingHom
variable {P}
+#print RingHom.RespectsIso.basicOpen_iff /-
theorem RespectsIso.basicOpen_iff (hP : RespectsIso @P) {X Y : Scheme} [IsAffine X] [IsAffine Y]
(f : X ⟶ Y) (r : Y.Presheaf.obj (Opposite.op ⊤)) :
P (Scheme.Γ.map (f ∣_ Y.basicOpen r).op) ↔
@@ -70,13 +71,17 @@ theorem RespectsIso.basicOpen_iff (hP : RespectsIso @P) {X Y : Scheme} [IsAffine
erw [← X.presheaf.map_comp]
congr
#align ring_hom.respects_iso.basic_open_iff RingHom.RespectsIso.basicOpen_iff
+-/
+#print RingHom.RespectsIso.basicOpen_iff_localization /-
theorem RespectsIso.basicOpen_iff_localization (hP : RespectsIso @P) {X Y : Scheme} [IsAffine X]
[IsAffine Y] (f : X ⟶ Y) (r : Y.Presheaf.obj (Opposite.op ⊤)) :
P (Scheme.Γ.map (f ∣_ Y.basicOpen r).op) ↔ P (Localization.awayMap (Scheme.Γ.map f.op) r) :=
(hP.basicOpen_iff _ _).trans (hP.is_localization_away_iff _ _ _ _).symm
#align ring_hom.respects_iso.basic_open_iff_localization RingHom.RespectsIso.basicOpen_iff_localization
+-/
+#print RingHom.RespectsIso.ofRestrict_morphismRestrict_iff /-
theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P) {X Y : Scheme}
[IsAffine Y] (f : X ⟶ Y) (r : Y.Presheaf.obj (Opposite.op ⊤)) (U : Opens X.carrier)
(hU : IsAffineOpen U) {V : Opens _}
@@ -119,7 +124,9 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
X.presheaf.map_comp]
congr
#align ring_hom.respects_iso.of_restrict_morphism_restrict_iff RingHom.RespectsIso.ofRestrict_morphismRestrict_iff
+-/
+#print RingHom.StableUnderBaseChange.Γ_pullback_fst /-
theorem StableUnderBaseChange.Γ_pullback_fst (hP : StableUnderBaseChange @P) (hP' : RespectsIso @P)
{X Y S : Scheme} [IsAffine X] [IsAffine Y] [IsAffine S] (f : X ⟶ S) (g : Y ⟶ S)
(H : P (Scheme.Γ.map g.op)) : P (Scheme.Γ.map (pullback.fst : pullback f g ⟶ _).op) :=
@@ -141,26 +148,32 @@ theorem StableUnderBaseChange.Γ_pullback_fst (hP : StableUnderBaseChange @P) (h
hP'.cancel_right_is_iso]
exact hP.pushout_inl _ hP' _ _ H
#align ring_hom.stable_under_base_change.Γ_pullback_fst RingHom.StableUnderBaseChange.Γ_pullback_fst
+-/
end RingHom
namespace AlgebraicGeometry
+#print AlgebraicGeometry.sourceAffineLocally /-
/-- For `P` a property of ring homomorphisms, `source_affine_locally P` holds for `f : X ⟶ Y`
whenever `P` holds for the restriction of `f` on every affine open subset of `X`. -/
def sourceAffineLocally : AffineTargetMorphismProperty := fun X Y f hY =>
∀ U : X.affineOpens, P (Scheme.Γ.map (X.of_restrict U.1.OpenEmbedding ≫ f).op)
#align algebraic_geometry.source_affine_locally AlgebraicGeometry.sourceAffineLocally
+-/
+#print AlgebraicGeometry.affineLocally /-
/-- For `P` a property of ring homomorphisms, `affine_locally P` holds for `f : X ⟶ Y` if for each
affine open `U = Spec A ⊆ Y` and `V = Spec B ⊆ f ⁻¹' U`, the ring hom `A ⟶ B` satisfies `P`.
Also see `affine_locally_iff_affine_opens_le`. -/
abbrev affineLocally : MorphismProperty Scheme :=
targetAffineLocally (sourceAffineLocally @P)
#align algebraic_geometry.affine_locally AlgebraicGeometry.affineLocally
+-/
variable {P}
+#print AlgebraicGeometry.sourceAffineLocally_respectsIso /-
theorem sourceAffineLocally_respectsIso (h₁ : RingHom.RespectsIso @P) :
(sourceAffineLocally @P).toProperty.RespectsIso :=
by
@@ -176,11 +189,15 @@ theorem sourceAffineLocally_respectsIso (h₁ : RingHom.RespectsIso @P) :
rw [← category.assoc, op_comp, functor.map_comp, h₁.cancel_left_is_iso]
exact H U
#align algebraic_geometry.source_affine_locally_respects_iso AlgebraicGeometry.sourceAffineLocally_respectsIso
+-/
+#print AlgebraicGeometry.affineLocally_respectsIso /-
theorem affineLocally_respectsIso (h : RingHom.RespectsIso @P) : (affineLocally @P).RespectsIso :=
targetAffineLocally_respectsIso (sourceAffineLocally_respectsIso h)
#align algebraic_geometry.affine_locally_respects_iso AlgebraicGeometry.affineLocally_respectsIso
+-/
+#print AlgebraicGeometry.affineLocally_iff_affineOpens_le /-
theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Scheme} (f : X ⟶ Y) :
affineLocally (@P) f ↔
∀ (U : Y.affineOpens) (V : X.affineOpens) (e : V.1 ≤ (Opens.map f.1.base).obj U.1),
@@ -217,7 +234,9 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
· dsimp only [functor.op, unop_op]; rw [opens.open_embedding_obj_top]; rfl
· infer_instance
#align algebraic_geometry.affine_locally_iff_affine_opens_le AlgebraicGeometry.affineLocally_iff_affineOpens_le
+-/
+#print AlgebraicGeometry.scheme_restrict_basicOpen_of_localizationPreserves /-
theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.RespectsIso @P)
(h₂ : RingHom.LocalizationPreserves @P) {X Y : Scheme} [IsAffine Y] (f : X ⟶ Y)
(r : Y.Presheaf.obj (op ⊤)) (H : sourceAffineLocally (@P) f)
@@ -236,8 +255,10 @@ theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.Respe
· exact U.2.imageIsOpenImmersion _
· ext1; exact (Set.preimage_image_eq _ Subtype.coe_injective).symm
#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.scheme_restrict_basicOpen_of_localizationPreserves
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
+#print AlgebraicGeometry.sourceAffineLocally_isLocal /-
theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso @P)
(h₂ : RingHom.LocalizationPreserves @P) (h₃ : RingHom.OfLocalizationSpan @P) :
(sourceAffineLocally @P).IsLocal := by
@@ -263,10 +284,12 @@ theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso @P)
subst hV
exact U.2.mapRestrictBasicOpen (Scheme.Γ.map f.op r.1)
#align algebraic_geometry.source_affine_locally_is_local AlgebraicGeometry.sourceAffineLocally_isLocal
+-/
variable {P} (hP : RingHom.PropertyIsLocal @P)
-theorem source_affine_locally_of_source_open_cover_aux (h₁ : RingHom.RespectsIso @P)
+#print AlgebraicGeometry.sourceAffineLocally_of_source_open_cover_aux /-
+theorem sourceAffineLocally_of_source_open_cover_aux (h₁ : RingHom.RespectsIso @P)
(h₃ : RingHom.OfLocalizationSpanTarget @P) {X Y : Scheme} (f : X ⟶ Y) (U : X.affineOpens)
(s : Set (X.Presheaf.obj (op U.1))) (hs : Ideal.span s = ⊤)
(hs' : ∀ r : s, P (Scheme.Γ.map (X.of_restrict (X.basicOpen r.1).OpenEmbedding ≫ f).op)) :
@@ -303,8 +326,10 @@ theorem source_affine_locally_of_source_open_cover_aux (h₁ : RingHom.RespectsI
erw [PresheafedSpace.is_open_immersion.of_restrict_inv_app_apply]
rw [Scheme.basic_open_res_eq]
· infer_instance
-#align algebraic_geometry.source_affine_locally_of_source_open_cover_aux AlgebraicGeometry.source_affine_locally_of_source_open_cover_aux
+#align algebraic_geometry.source_affine_locally_of_source_open_cover_aux AlgebraicGeometry.sourceAffineLocally_of_source_open_cover_aux
+-/
+#print AlgebraicGeometry.isOpenImmersionCat_comp_of_sourceAffineLocally /-
theorem isOpenImmersionCat_comp_of_sourceAffineLocally (h₁ : RingHom.RespectsIso @P)
{X Y Z : Scheme} [IsAffine X] [IsAffine Z] (f : X ⟶ Y) [IsOpenImmersionCat f] (g : Y ⟶ Z)
(h₂ : sourceAffineLocally (@P) g) : P (Scheme.Γ.map (f ≫ g).op) :=
@@ -319,6 +344,7 @@ theorem isOpenImmersionCat_comp_of_sourceAffineLocally (h₁ : RingHom.RespectsI
· exact Subtype.range_coe
· infer_instance
#align algebraic_geometry.is_open_immersion_comp_of_source_affine_locally AlgebraicGeometry.isOpenImmersionCat_comp_of_sourceAffineLocally
+-/
end AlgebraicGeometry
@@ -328,6 +354,7 @@ namespace RingHom.PropertyIsLocal
variable {P} (hP : RingHom.PropertyIsLocal @P)
+#print RingHom.PropertyIsLocal.sourceAffineLocally_of_source_openCover /-
theorem sourceAffineLocally_of_source_openCover {X Y : Scheme} (f : X ⟶ Y) [IsAffine Y]
(𝒰 : X.OpenCover) [∀ i, IsAffine (𝒰.obj i)] (H : ∀ i, P (Scheme.Γ.map (𝒰.map i ≫ f).op)) :
sourceAffineLocally (@P) f :=
@@ -378,8 +405,10 @@ theorem sourceAffineLocally_of_source_openCover {X Y : Scheme} (f : X ⟶ Y) [Is
rwa [← Scheme.Γ.map_comp, ← op_comp, is_open_immersion.iso_of_range_eq_inv,
is_open_immersion.lift_fac_assoc] at H
#align ring_hom.property_is_local.source_affine_locally_of_source_open_cover RingHom.PropertyIsLocal.sourceAffineLocally_of_source_openCover
+-/
-theorem affine_openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
+#print RingHom.PropertyIsLocal.affine_openCover_TFAE /-
+theorem affine_openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
TFAE
[sourceAffineLocally (@P) f,
∃ (𝒰 : Scheme.OpenCover.{u} X) (_ : ∀ i, IsAffine (𝒰.obj i)),
@@ -410,9 +439,11 @@ theorem affine_openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
· rintro ⟨𝒰, _, h𝒰⟩
exact hP.source_affine_locally_of_source_open_cover f 𝒰 h𝒰
tfae_finish
-#align ring_hom.property_is_local.affine_open_cover_tfae RingHom.PropertyIsLocal.affine_openCover_tFAE
+#align ring_hom.property_is_local.affine_open_cover_tfae RingHom.PropertyIsLocal.affine_openCover_TFAE
+-/
-theorem openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
+#print RingHom.PropertyIsLocal.openCover_TFAE /-
+theorem openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
TFAE
[sourceAffineLocally (@P) f,
∃ 𝒰 : Scheme.OpenCover.{u} X, ∀ i : 𝒰.J, sourceAffineLocally (@P) (𝒰.map i ≫ f),
@@ -442,13 +473,17 @@ theorem openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
apply @h𝒰 _ (show _ from _)
dsimp; infer_instance
tfae_finish
-#align ring_hom.property_is_local.open_cover_tfae RingHom.PropertyIsLocal.openCover_tFAE
+#align ring_hom.property_is_local.open_cover_tfae RingHom.PropertyIsLocal.openCover_TFAE
+-/
-theorem sourceAffineLocally_comp_of_isOpenImmersionCat {X Y Z : Scheme.{u}} [IsAffine Z] (f : X ⟶ Y)
+#print RingHom.PropertyIsLocal.sourceAffineLocally_comp_of_isOpenImmersion /-
+theorem sourceAffineLocally_comp_of_isOpenImmersion {X Y Z : Scheme.{u}} [IsAffine Z] (f : X ⟶ Y)
(g : Y ⟶ Z) [IsOpenImmersionCat f] (H : sourceAffineLocally (@P) g) :
sourceAffineLocally (@P) (f ≫ g) := by apply ((hP.open_cover_tfae g).out 0 3).mp H
-#align ring_hom.property_is_local.source_affine_locally_comp_of_is_open_immersion RingHom.PropertyIsLocal.sourceAffineLocally_comp_of_isOpenImmersionCat
+#align ring_hom.property_is_local.source_affine_locally_comp_of_is_open_immersion RingHom.PropertyIsLocal.sourceAffineLocally_comp_of_isOpenImmersion
+-/
+#print RingHom.PropertyIsLocal.source_affine_openCover_iff /-
theorem source_affine_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) [IsAffine Y]
(𝒰 : Scheme.OpenCover.{u} X) [∀ i, IsAffine (𝒰.obj i)] :
sourceAffineLocally (@P) f ↔ ∀ i, P (Scheme.Γ.map (𝒰.map i ≫ f).op) :=
@@ -459,16 +494,22 @@ theorem source_affine_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) [IsAffine Y
let h := ((hP.affine_openCover_TFAE f).out 1 0).mp
h ⟨𝒰, inferInstance, H⟩⟩
#align ring_hom.property_is_local.source_affine_open_cover_iff RingHom.PropertyIsLocal.source_affine_openCover_iff
+-/
+#print RingHom.PropertyIsLocal.isLocal_sourceAffineLocally /-
theorem isLocal_sourceAffineLocally : (sourceAffineLocally @P).IsLocal :=
sourceAffineLocally_isLocal hP.RespectsIso hP.LocalizationPreserves
(@RingHom.PropertyIsLocal.ofLocalizationSpan _ hP)
#align ring_hom.property_is_local.is_local_source_affine_locally RingHom.PropertyIsLocal.isLocal_sourceAffineLocally
+-/
+#print RingHom.PropertyIsLocal.is_local_affineLocally /-
theorem is_local_affineLocally : PropertyIsLocalAtTarget (affineLocally @P) :=
hP.isLocal_sourceAffineLocally.targetAffineLocallyIsLocal
#align ring_hom.property_is_local.is_local_affine_locally RingHom.PropertyIsLocal.is_local_affineLocally
+-/
+#print RingHom.PropertyIsLocal.affine_openCover_iff /-
theorem affine_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.OpenCover.{u} Y)
[∀ i, IsAffine (𝒰.obj i)] (𝒰' : ∀ i, Scheme.OpenCover.{u} ((𝒰.pullbackCover f).obj i))
[∀ i j, IsAffine ((𝒰' i).obj j)] :
@@ -476,7 +517,9 @@ theorem affine_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.Ope
(hP.isLocal_sourceAffineLocally.affine_openCover_iff f 𝒰).trans
(forall_congr' fun i => hP.source_affine_openCover_iff _ (𝒰' i))
#align ring_hom.property_is_local.affine_open_cover_iff RingHom.PropertyIsLocal.affine_openCover_iff
+-/
+#print RingHom.PropertyIsLocal.source_openCover_iff /-
theorem source_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.OpenCover.{u} X) :
affineLocally (@P) f ↔ ∀ i, affineLocally (@P) (𝒰.map i ≫ f) :=
by
@@ -500,8 +543,10 @@ theorem source_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.Ope
pullback_symmetry_hom_comp_snd_assoc] at H
exact H
#align ring_hom.property_is_local.source_open_cover_iff RingHom.PropertyIsLocal.source_openCover_iff
+-/
-theorem affineLocally_of_isOpenImmersionCat (hP : RingHom.PropertyIsLocal @P) {X Y : Scheme}
+#print RingHom.PropertyIsLocal.affineLocally_of_isOpenImmersion /-
+theorem affineLocally_of_isOpenImmersion (hP : RingHom.PropertyIsLocal @P) {X Y : Scheme}
(f : X ⟶ Y) [hf : IsOpenImmersionCat f] : affineLocally (@P) f :=
by
intro U
@@ -515,8 +560,10 @@ theorem affineLocally_of_isOpenImmersionCat (hP : RingHom.PropertyIsLocal @P) {X
· infer_instance
· refine' IsLocalization.away_of_isUnit_of_bijective _ isUnit_one Function.bijective_id
· intro i; exact H
-#align ring_hom.property_is_local.affine_locally_of_is_open_immersion RingHom.PropertyIsLocal.affineLocally_of_isOpenImmersionCat
+#align ring_hom.property_is_local.affine_locally_of_is_open_immersion RingHom.PropertyIsLocal.affineLocally_of_isOpenImmersion
+-/
+#print RingHom.PropertyIsLocal.affineLocally_of_comp /-
theorem affineLocally_of_comp
(H :
∀ {R S T : Type u} [CommRing R] [CommRing S] [CommRing T],
@@ -549,7 +596,9 @@ theorem affineLocally_of_comp
pullback.lift_snd_assoc, category.assoc, ← category.assoc, op_comp, functor.map_comp] at h
exact H _ _ h
#align ring_hom.property_is_local.affine_locally_of_comp RingHom.PropertyIsLocal.affineLocally_of_comp
+-/
+#print RingHom.PropertyIsLocal.affineLocally_stableUnderComposition /-
theorem affineLocally_stableUnderComposition : (affineLocally @P).StableUnderComposition :=
by
intro X Y S f g hf hg
@@ -586,6 +635,7 @@ theorem affineLocally_stableUnderComposition : (affineLocally @P).StableUnderCom
hf
apply hf
#align ring_hom.property_is_local.affine_locally_stable_under_composition RingHom.PropertyIsLocal.affineLocally_stableUnderComposition
+-/
end RingHom.PropertyIsLocal
mathlib commit https://github.com/leanprover-community/mathlib/commit/9240e8be927a0955b9a82c6c85ef499ee3a626b8
@@ -238,7 +238,7 @@ theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.Respe
#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.scheme_restrict_basicOpen_of_localizationPreserves
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
-theorem sourceAffineLocallyIsLocal (h₁ : RingHom.RespectsIso @P)
+theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso @P)
(h₂ : RingHom.LocalizationPreserves @P) (h₃ : RingHom.OfLocalizationSpan @P) :
(sourceAffineLocally @P).IsLocal := by
constructor
@@ -262,7 +262,7 @@ theorem sourceAffineLocallyIsLocal (h₁ : RingHom.RespectsIso @P)
rw [Scheme.preimage_basic_open] at hV
subst hV
exact U.2.mapRestrictBasicOpen (Scheme.Γ.map f.op r.1)
-#align algebraic_geometry.source_affine_locally_is_local AlgebraicGeometry.sourceAffineLocallyIsLocal
+#align algebraic_geometry.source_affine_locally_is_local AlgebraicGeometry.sourceAffineLocally_isLocal
variable {P} (hP : RingHom.PropertyIsLocal @P)
@@ -453,27 +453,27 @@ theorem source_affine_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) [IsAffine Y
(𝒰 : Scheme.OpenCover.{u} X) [∀ i, IsAffine (𝒰.obj i)] :
sourceAffineLocally (@P) f ↔ ∀ i, P (Scheme.Γ.map (𝒰.map i ≫ f).op) :=
⟨fun H =>
- let h := ((hP.affine_openCover_tFAE f).out 0 2).mp H
+ let h := ((hP.affine_openCover_TFAE f).out 0 2).mp H
h 𝒰,
fun H =>
- let h := ((hP.affine_openCover_tFAE f).out 1 0).mp
+ let h := ((hP.affine_openCover_TFAE f).out 1 0).mp
h ⟨𝒰, inferInstance, H⟩⟩
#align ring_hom.property_is_local.source_affine_open_cover_iff RingHom.PropertyIsLocal.source_affine_openCover_iff
-theorem isLocalSourceAffineLocally : (sourceAffineLocally @P).IsLocal :=
- sourceAffineLocallyIsLocal hP.RespectsIso hP.LocalizationPreserves
+theorem isLocal_sourceAffineLocally : (sourceAffineLocally @P).IsLocal :=
+ sourceAffineLocally_isLocal hP.RespectsIso hP.LocalizationPreserves
(@RingHom.PropertyIsLocal.ofLocalizationSpan _ hP)
-#align ring_hom.property_is_local.is_local_source_affine_locally RingHom.PropertyIsLocal.isLocalSourceAffineLocally
+#align ring_hom.property_is_local.is_local_source_affine_locally RingHom.PropertyIsLocal.isLocal_sourceAffineLocally
-theorem isLocalAffineLocally : PropertyIsLocalAtTarget (affineLocally @P) :=
- hP.isLocalSourceAffineLocally.targetAffineLocallyIsLocal
-#align ring_hom.property_is_local.is_local_affine_locally RingHom.PropertyIsLocal.isLocalAffineLocally
+theorem is_local_affineLocally : PropertyIsLocalAtTarget (affineLocally @P) :=
+ hP.isLocal_sourceAffineLocally.targetAffineLocallyIsLocal
+#align ring_hom.property_is_local.is_local_affine_locally RingHom.PropertyIsLocal.is_local_affineLocally
theorem affine_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.OpenCover.{u} Y)
[∀ i, IsAffine (𝒰.obj i)] (𝒰' : ∀ i, Scheme.OpenCover.{u} ((𝒰.pullbackCover f).obj i))
[∀ i j, IsAffine ((𝒰' i).obj j)] :
affineLocally (@P) f ↔ ∀ i j, P (Scheme.Γ.map ((𝒰' i).map j ≫ pullback.snd).op) :=
- (hP.isLocalSourceAffineLocally.affine_openCover_iff f 𝒰).trans
+ (hP.isLocal_sourceAffineLocally.affine_openCover_iff f 𝒰).trans
(forall_congr' fun i => hP.source_affine_openCover_iff _ (𝒰' i))
#align ring_hom.property_is_local.affine_open_cover_iff RingHom.PropertyIsLocal.affine_openCover_iff
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b981918a93bc45a8600de608cde7944a80d92b9
@@ -99,16 +99,16 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
dsimp
simp only [Set.image_univ, Subtype.range_coe, Set.image_subset_iff]
rfl
- · exact AlgebraicGeometry.Γ_restrict_is_localization Y r
+ · exact AlgebraicGeometry.Γ_restrict_isLocalization Y r
· rw [← U.open_embedding_obj_top] at hU
dsimp [Scheme.Γ_obj_op, Scheme.Γ_map_op, Scheme.restrict]
- apply AlgebraicGeometry.is_localization_of_eq_basicOpen _ hU
+ apply AlgebraicGeometry.isLocalization_of_eq_basicOpen _ hU
rw [opens.open_embedding_obj_top, opens.functor_obj_map_obj]
convert (X.basic_open_res (Scheme.Γ.map f.op r) (hom_of_le le_top).op).symm using 1
rw [opens.open_embedding_obj_top, opens.open_embedding_obj_top, inf_comm, Scheme.Γ_map_op, ←
Scheme.preimage_basic_open]
· apply IsLocalization.ringHom_ext (Submonoid.powers r) _
- swap; · exact AlgebraicGeometry.Γ_restrict_is_localization Y r
+ swap; · exact AlgebraicGeometry.Γ_restrict_isLocalization Y r
rw [IsLocalization.Away.map, IsLocalization.map_comp, RingHom.algebraMap_toAlgebra,
RingHom.algebraMap_toAlgebra, op_comp, functor.map_comp, op_comp, functor.map_comp]
refine' (@category.assoc CommRingCat _ _ _ _ _ _ _ _).symm.trans _
@@ -120,7 +120,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
congr
#align ring_hom.respects_iso.of_restrict_morphism_restrict_iff RingHom.RespectsIso.ofRestrict_morphismRestrict_iff
-theorem StableUnderBaseChange.ΓPullbackFst (hP : StableUnderBaseChange @P) (hP' : RespectsIso @P)
+theorem StableUnderBaseChange.Γ_pullback_fst (hP : StableUnderBaseChange @P) (hP' : RespectsIso @P)
{X Y S : Scheme} [IsAffine X] [IsAffine Y] [IsAffine S] (f : X ⟶ S) (g : Y ⟶ S)
(H : P (Scheme.Γ.map g.op)) : P (Scheme.Γ.map (pullback.fst : pullback f g ⟶ _).op) :=
by
@@ -140,7 +140,7 @@ theorem StableUnderBaseChange.ΓPullbackFst (hP : StableUnderBaseChange @P) (hP'
pushout_iso_unop_pullback_inl_hom (Quiver.Hom.unop _) (Quiver.Hom.unop _),
hP'.cancel_right_is_iso]
exact hP.pushout_inl _ hP' _ _ H
-#align ring_hom.stable_under_base_change.Γ_pullback_fst RingHom.StableUnderBaseChange.ΓPullbackFst
+#align ring_hom.stable_under_base_change.Γ_pullback_fst RingHom.StableUnderBaseChange.Γ_pullback_fst
end RingHom
@@ -218,7 +218,7 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
· infer_instance
#align algebraic_geometry.affine_locally_iff_affine_opens_le AlgebraicGeometry.affineLocally_iff_affineOpens_le
-theorem schemeRestrictBasicOpenOfLocalizationPreserves (h₁ : RingHom.RespectsIso @P)
+theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.RespectsIso @P)
(h₂ : RingHom.LocalizationPreserves @P) {X Y : Scheme} [IsAffine Y] (f : X ⟶ Y)
(r : Y.Presheaf.obj (op ⊤)) (H : sourceAffineLocally (@P) f)
(U : (X.restrict ((Opens.map f.1.base).obj <| Y.basicOpen r).OpenEmbedding).affineOpens) :
@@ -235,7 +235,7 @@ theorem schemeRestrictBasicOpenOfLocalizationPreserves (h₁ : RingHom.RespectsI
· infer_instance
· exact U.2.imageIsOpenImmersion _
· ext1; exact (Set.preimage_image_eq _ Subtype.coe_injective).symm
-#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.schemeRestrictBasicOpenOfLocalizationPreserves
+#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.scheme_restrict_basicOpen_of_localizationPreserves
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
theorem sourceAffineLocallyIsLocal (h₁ : RingHom.RespectsIso @P)
@@ -278,11 +278,11 @@ theorem source_affine_locally_of_source_open_cover_aux (h₁ : RingHom.RespectsI
rintro ⟨s, r, hr, hs⟩
have :=
(@Localization.algEquiv _ _ _ _ _
- (@AlgebraicGeometry.Γ_restrict_is_localization _ U.2 s)).toRingEquiv.toCommRingCatIso
+ (@AlgebraicGeometry.Γ_restrict_isLocalization _ U.2 s)).toRingEquiv.toCommRingCatIso
refine'
(h₁.cancel_right_is_iso _
(@Localization.algEquiv _ _ _ _ _
- (@AlgebraicGeometry.Γ_restrict_is_localization _ U.2
+ (@AlgebraicGeometry.Γ_restrict_isLocalization _ U.2
s)).toRingEquiv.toCommRingCatIso.Hom).mp
_
subst hs
@@ -305,8 +305,8 @@ theorem source_affine_locally_of_source_open_cover_aux (h₁ : RingHom.RespectsI
· infer_instance
#align algebraic_geometry.source_affine_locally_of_source_open_cover_aux AlgebraicGeometry.source_affine_locally_of_source_open_cover_aux
-theorem isOpenImmersionCompOfSourceAffineLocally (h₁ : RingHom.RespectsIso @P) {X Y Z : Scheme}
- [IsAffine X] [IsAffine Z] (f : X ⟶ Y) [IsOpenImmersionCat f] (g : Y ⟶ Z)
+theorem isOpenImmersionCat_comp_of_sourceAffineLocally (h₁ : RingHom.RespectsIso @P)
+ {X Y Z : Scheme} [IsAffine X] [IsAffine Z] (f : X ⟶ Y) [IsOpenImmersionCat f] (g : Y ⟶ Z)
(h₂ : sourceAffineLocally (@P) g) : P (Scheme.Γ.map (f ≫ g).op) :=
by
rw [←
@@ -318,7 +318,7 @@ theorem isOpenImmersionCompOfSourceAffineLocally (h₁ : RingHom.RespectsIso @P)
· infer_instance
· exact Subtype.range_coe
· infer_instance
-#align algebraic_geometry.is_open_immersion_comp_of_source_affine_locally AlgebraicGeometry.isOpenImmersionCompOfSourceAffineLocally
+#align algebraic_geometry.is_open_immersion_comp_of_source_affine_locally AlgebraicGeometry.isOpenImmersionCat_comp_of_sourceAffineLocally
end AlgebraicGeometry
@@ -328,7 +328,7 @@ namespace RingHom.PropertyIsLocal
variable {P} (hP : RingHom.PropertyIsLocal @P)
-theorem sourceAffineLocallyOfSourceOpenCover {X Y : Scheme} (f : X ⟶ Y) [IsAffine Y]
+theorem sourceAffineLocally_of_source_openCover {X Y : Scheme} (f : X ⟶ Y) [IsAffine Y]
(𝒰 : X.OpenCover) [∀ i, IsAffine (𝒰.obj i)] (H : ∀ i, P (Scheme.Γ.map (𝒰.map i ≫ f).op)) :
sourceAffineLocally (@P) f :=
by
@@ -377,7 +377,7 @@ theorem sourceAffineLocallyOfSourceOpenCover {X Y : Scheme} (f : X ⟶ Y) [IsAff
H
rwa [← Scheme.Γ.map_comp, ← op_comp, is_open_immersion.iso_of_range_eq_inv,
is_open_immersion.lift_fac_assoc] at H
-#align ring_hom.property_is_local.source_affine_locally_of_source_open_cover RingHom.PropertyIsLocal.sourceAffineLocallyOfSourceOpenCover
+#align ring_hom.property_is_local.source_affine_locally_of_source_open_cover RingHom.PropertyIsLocal.sourceAffineLocally_of_source_openCover
theorem affine_openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
TFAE
@@ -444,10 +444,10 @@ theorem openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
tfae_finish
#align ring_hom.property_is_local.open_cover_tfae RingHom.PropertyIsLocal.openCover_tFAE
-theorem sourceAffineLocallyCompOfIsOpenImmersion {X Y Z : Scheme.{u}} [IsAffine Z] (f : X ⟶ Y)
+theorem sourceAffineLocally_comp_of_isOpenImmersionCat {X Y Z : Scheme.{u}} [IsAffine Z] (f : X ⟶ Y)
(g : Y ⟶ Z) [IsOpenImmersionCat f] (H : sourceAffineLocally (@P) g) :
sourceAffineLocally (@P) (f ≫ g) := by apply ((hP.open_cover_tfae g).out 0 3).mp H
-#align ring_hom.property_is_local.source_affine_locally_comp_of_is_open_immersion RingHom.PropertyIsLocal.sourceAffineLocallyCompOfIsOpenImmersion
+#align ring_hom.property_is_local.source_affine_locally_comp_of_is_open_immersion RingHom.PropertyIsLocal.sourceAffineLocally_comp_of_isOpenImmersionCat
theorem source_affine_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) [IsAffine Y]
(𝒰 : Scheme.OpenCover.{u} X) [∀ i, IsAffine (𝒰.obj i)] :
mathlib commit https://github.com/leanprover-community/mathlib/commit/6285167a053ad0990fc88e56c48ccd9fae6550eb
@@ -306,7 +306,7 @@ theorem source_affine_locally_of_source_open_cover_aux (h₁ : RingHom.RespectsI
#align algebraic_geometry.source_affine_locally_of_source_open_cover_aux AlgebraicGeometry.source_affine_locally_of_source_open_cover_aux
theorem isOpenImmersionCompOfSourceAffineLocally (h₁ : RingHom.RespectsIso @P) {X Y Z : Scheme}
- [IsAffine X] [IsAffine Z] (f : X ⟶ Y) [IsOpenImmersion f] (g : Y ⟶ Z)
+ [IsAffine X] [IsAffine Z] (f : X ⟶ Y) [IsOpenImmersionCat f] (g : Y ⟶ Z)
(h₂ : sourceAffineLocally (@P) g) : P (Scheme.Γ.map (f ≫ g).op) :=
by
rw [←
@@ -386,7 +386,8 @@ theorem affine_openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
∀ i : 𝒰.J, P (Scheme.Γ.map (𝒰.map i ≫ f).op),
∀ (𝒰 : Scheme.OpenCover.{u} X) [∀ i, IsAffine (𝒰.obj i)] (i : 𝒰.J),
P (Scheme.Γ.map (𝒰.map i ≫ f).op),
- ∀ {U : Scheme} (g : U ⟶ X) [IsAffine U] [IsOpenImmersion g], P (Scheme.Γ.map (g ≫ f).op)] :=
+ ∀ {U : Scheme} (g : U ⟶ X) [IsAffine U] [IsOpenImmersionCat g],
+ P (Scheme.Γ.map (g ≫ f).op)] :=
by
tfae_have 1 → 4
· intro H U g _ hg
@@ -416,7 +417,7 @@ theorem openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
[sourceAffineLocally (@P) f,
∃ 𝒰 : Scheme.OpenCover.{u} X, ∀ i : 𝒰.J, sourceAffineLocally (@P) (𝒰.map i ≫ f),
∀ (𝒰 : Scheme.OpenCover.{u} X) (i : 𝒰.J), sourceAffineLocally (@P) (𝒰.map i ≫ f),
- ∀ {U : Scheme} (g : U ⟶ X) [IsOpenImmersion g], sourceAffineLocally (@P) (g ≫ f)] :=
+ ∀ {U : Scheme} (g : U ⟶ X) [IsOpenImmersionCat g], sourceAffineLocally (@P) (g ≫ f)] :=
by
tfae_have 1 → 4
· intro H U g hg V
@@ -444,7 +445,7 @@ theorem openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
#align ring_hom.property_is_local.open_cover_tfae RingHom.PropertyIsLocal.openCover_tFAE
theorem sourceAffineLocallyCompOfIsOpenImmersion {X Y Z : Scheme.{u}} [IsAffine Z] (f : X ⟶ Y)
- (g : Y ⟶ Z) [IsOpenImmersion f] (H : sourceAffineLocally (@P) g) :
+ (g : Y ⟶ Z) [IsOpenImmersionCat f] (H : sourceAffineLocally (@P) g) :
sourceAffineLocally (@P) (f ≫ g) := by apply ((hP.open_cover_tfae g).out 0 3).mp H
#align ring_hom.property_is_local.source_affine_locally_comp_of_is_open_immersion RingHom.PropertyIsLocal.sourceAffineLocallyCompOfIsOpenImmersion
@@ -500,8 +501,8 @@ theorem source_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.Ope
exact H
#align ring_hom.property_is_local.source_open_cover_iff RingHom.PropertyIsLocal.source_openCover_iff
-theorem affineLocally_of_isOpenImmersion (hP : RingHom.PropertyIsLocal @P) {X Y : Scheme}
- (f : X ⟶ Y) [hf : IsOpenImmersion f] : affineLocally (@P) f :=
+theorem affineLocally_of_isOpenImmersionCat (hP : RingHom.PropertyIsLocal @P) {X Y : Scheme}
+ (f : X ⟶ Y) [hf : IsOpenImmersionCat f] : affineLocally (@P) f :=
by
intro U
haveI H : is_affine _ := U.2
@@ -514,7 +515,7 @@ theorem affineLocally_of_isOpenImmersion (hP : RingHom.PropertyIsLocal @P) {X Y
· infer_instance
· refine' IsLocalization.away_of_isUnit_of_bijective _ isUnit_one Function.bijective_id
· intro i; exact H
-#align ring_hom.property_is_local.affine_locally_of_is_open_immersion RingHom.PropertyIsLocal.affineLocally_of_isOpenImmersion
+#align ring_hom.property_is_local.affine_locally_of_is_open_immersion RingHom.PropertyIsLocal.affineLocally_of_isOpenImmersionCat
theorem affineLocally_of_comp
(H :
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -120,7 +120,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
congr
#align ring_hom.respects_iso.of_restrict_morphism_restrict_iff RingHom.RespectsIso.ofRestrict_morphismRestrict_iff
-theorem StableUnderBaseChange.Γ_pullback_fst (hP : StableUnderBaseChange @P) (hP' : RespectsIso @P)
+theorem StableUnderBaseChange.ΓPullbackFst (hP : StableUnderBaseChange @P) (hP' : RespectsIso @P)
{X Y S : Scheme} [IsAffine X] [IsAffine Y] [IsAffine S] (f : X ⟶ S) (g : Y ⟶ S)
(H : P (Scheme.Γ.map g.op)) : P (Scheme.Γ.map (pullback.fst : pullback f g ⟶ _).op) :=
by
@@ -140,7 +140,7 @@ theorem StableUnderBaseChange.Γ_pullback_fst (hP : StableUnderBaseChange @P) (h
pushout_iso_unop_pullback_inl_hom (Quiver.Hom.unop _) (Quiver.Hom.unop _),
hP'.cancel_right_is_iso]
exact hP.pushout_inl _ hP' _ _ H
-#align ring_hom.stable_under_base_change.Γ_pullback_fst RingHom.StableUnderBaseChange.Γ_pullback_fst
+#align ring_hom.stable_under_base_change.Γ_pullback_fst RingHom.StableUnderBaseChange.ΓPullbackFst
end RingHom
@@ -218,7 +218,7 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
· infer_instance
#align algebraic_geometry.affine_locally_iff_affine_opens_le AlgebraicGeometry.affineLocally_iff_affineOpens_le
-theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.RespectsIso @P)
+theorem schemeRestrictBasicOpenOfLocalizationPreserves (h₁ : RingHom.RespectsIso @P)
(h₂ : RingHom.LocalizationPreserves @P) {X Y : Scheme} [IsAffine Y] (f : X ⟶ Y)
(r : Y.Presheaf.obj (op ⊤)) (H : sourceAffineLocally (@P) f)
(U : (X.restrict ((Opens.map f.1.base).obj <| Y.basicOpen r).OpenEmbedding).affineOpens) :
@@ -235,7 +235,7 @@ theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.Respe
· infer_instance
· exact U.2.imageIsOpenImmersion _
· ext1; exact (Set.preimage_image_eq _ Subtype.coe_injective).symm
-#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.scheme_restrict_basicOpen_of_localizationPreserves
+#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.schemeRestrictBasicOpenOfLocalizationPreserves
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
theorem sourceAffineLocallyIsLocal (h₁ : RingHom.RespectsIso @P)
@@ -305,7 +305,7 @@ theorem source_affine_locally_of_source_open_cover_aux (h₁ : RingHom.RespectsI
· infer_instance
#align algebraic_geometry.source_affine_locally_of_source_open_cover_aux AlgebraicGeometry.source_affine_locally_of_source_open_cover_aux
-theorem isOpenImmersion_comp_of_sourceAffineLocally (h₁ : RingHom.RespectsIso @P) {X Y Z : Scheme}
+theorem isOpenImmersionCompOfSourceAffineLocally (h₁ : RingHom.RespectsIso @P) {X Y Z : Scheme}
[IsAffine X] [IsAffine Z] (f : X ⟶ Y) [IsOpenImmersion f] (g : Y ⟶ Z)
(h₂ : sourceAffineLocally (@P) g) : P (Scheme.Γ.map (f ≫ g).op) :=
by
@@ -318,7 +318,7 @@ theorem isOpenImmersion_comp_of_sourceAffineLocally (h₁ : RingHom.RespectsIso
· infer_instance
· exact Subtype.range_coe
· infer_instance
-#align algebraic_geometry.is_open_immersion_comp_of_source_affine_locally AlgebraicGeometry.isOpenImmersion_comp_of_sourceAffineLocally
+#align algebraic_geometry.is_open_immersion_comp_of_source_affine_locally AlgebraicGeometry.isOpenImmersionCompOfSourceAffineLocally
end AlgebraicGeometry
@@ -443,10 +443,10 @@ theorem openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
tfae_finish
#align ring_hom.property_is_local.open_cover_tfae RingHom.PropertyIsLocal.openCover_tFAE
-theorem sourceAffineLocally_comp_of_isOpenImmersion {X Y Z : Scheme.{u}} [IsAffine Z] (f : X ⟶ Y)
+theorem sourceAffineLocallyCompOfIsOpenImmersion {X Y Z : Scheme.{u}} [IsAffine Z] (f : X ⟶ Y)
(g : Y ⟶ Z) [IsOpenImmersion f] (H : sourceAffineLocally (@P) g) :
sourceAffineLocally (@P) (f ≫ g) := by apply ((hP.open_cover_tfae g).out 0 3).mp H
-#align ring_hom.property_is_local.source_affine_locally_comp_of_is_open_immersion RingHom.PropertyIsLocal.sourceAffineLocally_comp_of_isOpenImmersion
+#align ring_hom.property_is_local.source_affine_locally_comp_of_is_open_immersion RingHom.PropertyIsLocal.sourceAffineLocallyCompOfIsOpenImmersion
theorem source_affine_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) [IsAffine Y]
(𝒰 : Scheme.OpenCover.{u} X) [∀ i, IsAffine (𝒰.obj i)] :
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -46,8 +46,6 @@ variable (P : ∀ {R S : Type u} [CommRing R] [CommRing S] (f : R →+* S), Prop
namespace RingHom
-include P
-
variable {P}
theorem RespectsIso.basicOpen_iff (hP : RespectsIso @P) {X Y : Scheme} [IsAffine X] [IsAffine Y]
@@ -330,8 +328,6 @@ namespace RingHom.PropertyIsLocal
variable {P} (hP : RingHom.PropertyIsLocal @P)
-include hP
-
theorem sourceAffineLocallyOfSourceOpenCover {X Y : Scheme} (f : X ⟶ Y) [IsAffine Y]
(𝒰 : X.OpenCover) [∀ i, IsAffine (𝒰.obj i)] (H : ∀ i, P (Scheme.Γ.map (𝒰.map i ≫ f).op)) :
sourceAffineLocally (@P) f :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -239,7 +239,7 @@ theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.Respe
· ext1; exact (Set.preimage_image_eq _ Subtype.coe_injective).symm
#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.scheme_restrict_basicOpen_of_localizationPreserves
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
theorem sourceAffineLocallyIsLocal (h₁ : RingHom.RespectsIso @P)
(h₂ : RingHom.LocalizationPreserves @P) (h₃ : RingHom.OfLocalizationSpan @P) :
(sourceAffineLocally @P).IsLocal := by
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -66,7 +66,7 @@ theorem RespectsIso.basicOpen_iff (hP : RespectsIso @P) {X Y : Scheme} [IsAffine
congr
delta IsLocalization.Away.map
refine' IsLocalization.ringHom_ext (Submonoid.powers r) _
- convert(IsLocalization.map_comp _).symm using 1
+ convert (IsLocalization.map_comp _).symm using 1
change Y.presheaf.map _ ≫ _ = _ ≫ X.presheaf.map _
rw [f.val.c.naturality_assoc]
erw [← X.presheaf.map_comp]
@@ -90,7 +90,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
P (Localization.awayMap (Scheme.Γ.map (X.of_restrict U.OpenEmbedding ≫ f).op) r) :=
by
subst e
- convert(hP.is_localization_away_iff _ _ _ _).symm
+ convert (hP.is_localization_away_iff _ _ _ _).symm
rotate_left
· infer_instance
· apply RingHom.toAlgebra
@@ -106,7 +106,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
dsimp [Scheme.Γ_obj_op, Scheme.Γ_map_op, Scheme.restrict]
apply AlgebraicGeometry.is_localization_of_eq_basicOpen _ hU
rw [opens.open_embedding_obj_top, opens.functor_obj_map_obj]
- convert(X.basic_open_res (Scheme.Γ.map f.op r) (hom_of_le le_top).op).symm using 1
+ convert (X.basic_open_res (Scheme.Γ.map f.op r) (hom_of_le le_top).op).symm using 1
rw [opens.open_embedding_obj_top, opens.open_embedding_obj_top, inf_comm, Scheme.Γ_map_op, ←
Scheme.preimage_basic_open]
· apply IsLocalization.ringHom_ext (Submonoid.powers r) _
@@ -231,7 +231,7 @@ theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.Respe
f ∣_ Y.basicOpen r).op) :=
by
specialize H ⟨_, U.2.imageIsOpenImmersion (X.of_restrict _)⟩
- convert(h₁.of_restrict_morphism_restrict_iff _ _ _ _ _).mpr _ using 1
+ convert (h₁.of_restrict_morphism_restrict_iff _ _ _ _ _).mpr _ using 1
pick_goal 5
· exact h₂.away r H
· infer_instance
@@ -274,7 +274,7 @@ theorem source_affine_locally_of_source_open_cover_aux (h₁ : RingHom.RespectsI
(hs' : ∀ r : s, P (Scheme.Γ.map (X.of_restrict (X.basicOpen r.1).OpenEmbedding ≫ f).op)) :
P (Scheme.Γ.map (X.of_restrict U.1.OpenEmbedding ≫ f).op) :=
by
- apply_fun Ideal.map (X.presheaf.map (eq_to_hom U.1.openEmbedding_obj_top).op) at hs
+ apply_fun Ideal.map (X.presheaf.map (eq_to_hom U.1.openEmbedding_obj_top).op) at hs
rw [Ideal.map_span, Ideal.map_top] at hs
apply h₃ _ _ hs
rintro ⟨s, r, hr, hs⟩
@@ -357,8 +357,8 @@ theorem sourceAffineLocallyOfSourceOpenCover {X Y : Scheme} (f : X ⟶ Y) [IsAff
refine' Eq.trans _ (X.presheaf.map_comp _ _)
change X.presheaf.map _ = _
congr
- convert hP.holds_for_localization_away _
- (X.presheaf.map (eq_to_hom U.1.openEmbedding_obj_top).op r)
+ convert
+ hP.holds_for_localization_away _ (X.presheaf.map (eq_to_hom U.1.openEmbedding_obj_top).op r)
· exact (RingHom.algebraMap_toAlgebra _).symm
· dsimp [Scheme.Γ]
have := U.2
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -102,7 +102,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
simp only [Set.image_univ, Subtype.range_coe, Set.image_subset_iff]
rfl
· exact AlgebraicGeometry.Γ_restrict_is_localization Y r
- · rw [← U.open_embedding_obj_top] at hU
+ · rw [← U.open_embedding_obj_top] at hU
dsimp [Scheme.Γ_obj_op, Scheme.Γ_map_op, Scheme.restrict]
apply AlgebraicGeometry.is_localization_of_eq_basicOpen _ hU
rw [opens.open_embedding_obj_top, opens.functor_obj_map_obj]
@@ -134,10 +134,10 @@ theorem StableUnderBaseChange.Γ_pullback_fst (hP : StableUnderBaseChange @P) (h
_root_.congr_arg Quiver.Hom.unop
(preserves_pullback.iso_hom_fst AffineScheme.Γ.right_op (AffineScheme.of_hom f)
(AffineScheme.of_hom g))
- simp only [Quiver.Hom.unop_op, functor.right_op_map, unop_comp] at this
- delta AffineScheme.Γ at this
+ simp only [Quiver.Hom.unop_op, functor.right_op_map, unop_comp] at this
+ delta AffineScheme.Γ at this
simp only [Quiver.Hom.unop_op, functor.comp_map, AffineScheme.forget_to_Scheme_map,
- functor.op_map] at this
+ functor.op_map] at this
rw [← this, hP'.cancel_right_is_iso, ←
pushout_iso_unop_pullback_inl_hom (Quiver.Hom.unop _) (Quiver.Hom.unop _),
hP'.cancel_right_is_iso]
@@ -201,7 +201,7 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
ext1; refine' set.image_preimage_eq_inter_range.trans (set.inter_eq_left_iff_subset.mpr _)
convert e; exact Subtype.range_coe
have := H ⟨(opens.map (X.of_restrict U'.open_embedding).1.base).obj V.1, _⟩
- erw [← X.presheaf.map_comp] at this
+ erw [← X.presheaf.map_comp] at this
rw [← hP.cancel_right_is_iso _ (X.presheaf.map (eq_to_hom _)), category.assoc, ←
X.presheaf.map_comp]
convert this using 1
@@ -252,7 +252,7 @@ theorem sourceAffineLocallyIsLocal (h₁ : RingHom.RespectsIso @P)
apply h₃ _ _ hs
intro r
have := hs' r ⟨(opens.map (X.of_restrict _).1.base).obj U.1, _⟩
- rwa [h₁.of_restrict_morphism_restrict_iff] at this
+ rwa [h₁.of_restrict_morphism_restrict_iff] at this
· exact U.2
· rfl
· infer_instance
@@ -261,7 +261,7 @@ theorem sourceAffineLocallyIsLocal (h₁ : RingHom.RespectsIso @P)
is_affine_open ((opens.map (X.of_restrict V.OpenEmbedding).1.base).obj U.1)
by exact this _ rfl
intro V hV
- rw [Scheme.preimage_basic_open] at hV
+ rw [Scheme.preimage_basic_open] at hV
subst hV
exact U.2.mapRestrictBasicOpen (Scheme.Γ.map f.op r.1)
#align algebraic_geometry.source_affine_locally_is_local AlgebraicGeometry.sourceAffineLocallyIsLocal
@@ -274,8 +274,8 @@ theorem source_affine_locally_of_source_open_cover_aux (h₁ : RingHom.RespectsI
(hs' : ∀ r : s, P (Scheme.Γ.map (X.of_restrict (X.basicOpen r.1).OpenEmbedding ≫ f).op)) :
P (Scheme.Γ.map (X.of_restrict U.1.OpenEmbedding ≫ f).op) :=
by
- apply_fun Ideal.map (X.presheaf.map (eq_to_hom U.1.openEmbedding_obj_top).op) at hs
- rw [Ideal.map_span, Ideal.map_top] at hs
+ apply_fun Ideal.map (X.presheaf.map (eq_to_hom U.1.openEmbedding_obj_top).op) at hs
+ rw [Ideal.map_span, Ideal.map_top] at hs
apply h₃ _ _ hs
rintro ⟨s, r, hr, hs⟩
have :=
@@ -362,7 +362,7 @@ theorem sourceAffineLocallyOfSourceOpenCover {X Y : Scheme} (f : X ⟶ Y) [IsAff
· exact (RingHom.algebraMap_toAlgebra _).symm
· dsimp [Scheme.Γ]
have := U.2
- rw [← U.1.openEmbedding_obj_top] at this
+ rw [← U.1.openEmbedding_obj_top] at this
convert is_localization_basic_open this _ using 6 <;> rw [opens.open_embedding_obj_top] <;>
exact (Scheme.basic_open_res_eq _ _ _).symm
· introv hs hs'
@@ -378,15 +378,15 @@ theorem sourceAffineLocallyOfSourceOpenCover {X Y : Scheme} (f : X ⟶ Y) [IsAff
(Scheme.Γ.map
(is_open_immersion.iso_of_range_eq (𝒰.map i) (X.of_restrict (S i).1.OpenEmbedding)
subtype.range_coe.symm).inv.op)] at
- H
+ H
rwa [← Scheme.Γ.map_comp, ← op_comp, is_open_immersion.iso_of_range_eq_inv,
- is_open_immersion.lift_fac_assoc] at H
+ is_open_immersion.lift_fac_assoc] at H
#align ring_hom.property_is_local.source_affine_locally_of_source_open_cover RingHom.PropertyIsLocal.sourceAffineLocallyOfSourceOpenCover
theorem affine_openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
TFAE
[sourceAffineLocally (@P) f,
- ∃ (𝒰 : Scheme.OpenCover.{u} X)(_ : ∀ i, IsAffine (𝒰.obj i)),
+ ∃ (𝒰 : Scheme.OpenCover.{u} X) (_ : ∀ i, IsAffine (𝒰.obj i)),
∀ i : 𝒰.J, P (Scheme.Γ.map (𝒰.map i ≫ f).op),
∀ (𝒰 : Scheme.OpenCover.{u} X) [∀ i, IsAffine (𝒰.obj i)] (i : 𝒰.J),
P (Scheme.Γ.map (𝒰.map i ≫ f).op),
@@ -402,8 +402,8 @@ theorem affine_openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
(is_open_immersion.iso_of_range_eq g
(X.of_restrict (opens.open_embedding ⟨_, hg.base_open.open_range⟩))
subtype.range_coe.symm).Hom.op),
- ← Scheme.Γ.map_comp, ← op_comp, is_open_immersion.iso_of_range_eq_hom] at H
- erw [is_open_immersion.lift_fac_assoc] at H
+ ← Scheme.Γ.map_comp, ← op_comp, is_open_immersion.iso_of_range_eq_hom] at H
+ erw [is_open_immersion.lift_fac_assoc] at H
exact H
tfae_have 4 → 3
· intro H 𝒰 _ i; skip; apply H
@@ -425,7 +425,7 @@ theorem openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
tfae_have 1 → 4
· intro H U g hg V
skip
- rw [(hP.affine_open_cover_tfae f).out 0 3] at H
+ rw [(hP.affine_open_cover_tfae f).out 0 3] at H
haveI : is_affine _ := V.2
rw [← category.assoc]
apply H
@@ -440,7 +440,7 @@ theorem openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
· intro i; dsimp; infer_instance
· intro i
specialize h𝒰 i.1
- rw [(hP.affine_open_cover_tfae (𝒰.map i.fst ≫ f)).out 0 3] at h𝒰
+ rw [(hP.affine_open_cover_tfae (𝒰.map i.fst ≫ f)).out 0 3] at h𝒰
erw [category.assoc]
apply @h𝒰 _ (show _ from _)
dsimp; infer_instance
@@ -495,12 +495,12 @@ theorem source_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.Ope
use 𝒰.pullback_cover (X.of_restrict _)
intro i
specialize H i U
- rw [morphism_restrict_comp] at H
- delta morphism_restrict at H
+ rw [morphism_restrict_comp] at H
+ delta morphism_restrict at H
have := source_affine_locally_respects_iso hP.respects_iso
rw [category.assoc, affine_cancel_left_is_iso this, ←
affine_cancel_left_is_iso this (pullback_symmetry _ _).Hom,
- pullback_symmetry_hom_comp_snd_assoc] at H
+ pullback_symmetry_hom_comp_snd_assoc] at H
exact H
#align ring_hom.property_is_local.source_open_cover_iff RingHom.PropertyIsLocal.source_openCover_iff
@@ -540,16 +540,16 @@ theorem affineLocally_of_comp
let 𝒰' := (Z.affine_cover.pullback_cover g).bind fun i => Scheme.affine_cover _
have h𝒰' : ∀ i, is_affine (𝒰'.obj i) := by dsimp; infer_instance
rw [hP.affine_open_cover_iff f 𝒰' fun i => Scheme.affine_cover _]
- rw [hP.affine_open_cover_iff (f ≫ g) Z.affine_cover 𝒰] at h
+ rw [hP.affine_open_cover_iff (f ≫ g) Z.affine_cover 𝒰] at h
rintro ⟨i, j⟩ k
- dsimp at i j k
+ dsimp at i j k
specialize h i ⟨j, k⟩
dsimp only [Scheme.open_cover.bind_map, Scheme.open_cover.pushforward_iso_obj,
Scheme.pullback.open_cover_of_right_obj, Scheme.open_cover.pushforward_iso_map,
Scheme.pullback.open_cover_of_right_map, Scheme.open_cover.bind_obj,
- Scheme.open_cover.pullback_cover_obj, Scheme.open_cover.pullback_cover_map] at h⊢
+ Scheme.open_cover.pullback_cover_obj, Scheme.open_cover.pullback_cover_map] at h ⊢
rw [category.assoc, category.assoc, pullback_right_pullback_fst_iso_hom_snd,
- pullback.lift_snd_assoc, category.assoc, ← category.assoc, op_comp, functor.map_comp] at h
+ pullback.lift_snd_assoc, category.assoc, ← category.assoc, op_comp, functor.map_comp] at h
exact H _ _ h
#align ring_hom.property_is_local.affine_locally_of_comp RingHom.PropertyIsLocal.affineLocally_of_comp
@@ -570,7 +570,7 @@ theorem affineLocally_stableUnderComposition : (affineLocally @P).StableUnderCom
· exact 𝒰
· intro i j; dsimp at *; infer_instance
· rintro i ⟨j, k⟩
- dsimp at i j k
+ dsimp at i j k
dsimp only [Scheme.open_cover.bind_map, Scheme.open_cover.pushforward_iso_obj,
Scheme.pullback.open_cover_of_right_obj, Scheme.open_cover.pushforward_iso_map,
Scheme.pullback.open_cover_of_right_map, Scheme.open_cover.bind_obj]
@@ -578,15 +578,15 @@ theorem affineLocally_stableUnderComposition : (affineLocally @P).StableUnderCom
pullback.lift_snd_assoc, category.assoc, ← category.assoc, op_comp, functor.map_comp]
apply hP.stable_under_composition
· exact (hP.affine_open_cover_iff _ _ _).mp hg _ _
- · delta affine_locally at hf
- rw [(hP.is_local_source_affine_locally.affine_open_cover_tfae f).out 0 3] at hf
+ · delta affine_locally at hf
+ rw [(hP.is_local_source_affine_locally.affine_open_cover_tfae f).out 0 3] at hf
specialize hf ((pullback g (S.affine_cover.map i)).affineCover.map j ≫ pullback.fst)
rw [(hP.affine_open_cover_tfae
(pullback.snd :
pullback f ((pullback g (S.affine_cover.map i)).affineCover.map j ≫ pullback.fst) ⟶
_)).out
0 3] at
- hf
+ hf
apply hf
#align ring_hom.property_is_local.affine_locally_stable_under_composition RingHom.PropertyIsLocal.affineLocally_stableUnderComposition
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -110,8 +110,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
rw [opens.open_embedding_obj_top, opens.open_embedding_obj_top, inf_comm, Scheme.Γ_map_op, ←
Scheme.preimage_basic_open]
· apply IsLocalization.ringHom_ext (Submonoid.powers r) _
- swap
- · exact AlgebraicGeometry.Γ_restrict_is_localization Y r
+ swap; · exact AlgebraicGeometry.Γ_restrict_is_localization Y r
rw [IsLocalization.Away.map, IsLocalization.map_comp, RingHom.algebraMap_toAlgebra,
RingHom.algebraMap_toAlgebra, op_comp, functor.map_comp, op_comp, functor.map_comp]
refine' (@category.assoc CommRingCat _ _ _ _ _ _ _ _).symm.trans _
@@ -199,19 +198,14 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
let U' := (opens.map f.val.base).obj U.1
have e' : U'.open_embedding.is_open_map.functor.obj ((opens.map U'.inclusion).obj V.1) = V.1 :=
by
- ext1
- refine' set.image_preimage_eq_inter_range.trans (set.inter_eq_left_iff_subset.mpr _)
- convert e
- exact Subtype.range_coe
+ ext1; refine' set.image_preimage_eq_inter_range.trans (set.inter_eq_left_iff_subset.mpr _)
+ convert e; exact Subtype.range_coe
have := H ⟨(opens.map (X.of_restrict U'.open_embedding).1.base).obj V.1, _⟩
erw [← X.presheaf.map_comp] at this
rw [← hP.cancel_right_is_iso _ (X.presheaf.map (eq_to_hom _)), category.assoc, ←
X.presheaf.map_comp]
convert this using 1
- · dsimp only [functor.op, unop_op]
- rw [opens.open_embedding_obj_top]
- congr 1
- exact e'.symm
+ · dsimp only [functor.op, unop_op]; rw [opens.open_embedding_obj_top]; congr 1; exact e'.symm
· infer_instance
· apply (is_affine_open_iff_of_is_open_immersion (X.of_restrict _) _).mp
convert V.2
@@ -222,9 +216,7 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
rw [← hP.cancel_right_is_iso _ (X.presheaf.map (eq_to_hom _)), category.assoc, ←
X.presheaf.map_comp]
convert H
- · dsimp only [functor.op, unop_op]
- rw [opens.open_embedding_obj_top]
- rfl
+ · dsimp only [functor.op, unop_op]; rw [opens.open_embedding_obj_top]; rfl
· infer_instance
#align algebraic_geometry.affine_locally_iff_affine_opens_le AlgebraicGeometry.affineLocally_iff_affineOpens_le
@@ -244,8 +236,7 @@ theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.Respe
· exact h₂.away r H
· infer_instance
· exact U.2.imageIsOpenImmersion _
- · ext1
- exact (Set.preimage_image_eq _ Subtype.coe_injective).symm
+ · ext1; exact (Set.preimage_image_eq _ Subtype.coe_injective).symm
#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.scheme_restrict_basicOpen_of_localizationPreserves
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
@@ -304,7 +295,7 @@ theorem source_affine_locally_of_source_open_cover_aux (h₁ : RingHom.RespectsI
erw [← X.presheaf.map_comp]
rw [← h₁.cancel_right_is_iso _ (X.presheaf.map (eq_to_hom _))]
convert hs' ⟨r, hr⟩ using 1
- · erw [category.assoc]
+ · erw [category.assoc];
rw [← X.presheaf.map_comp, op_comp, Scheme.Γ.map_comp, Scheme.Γ_map_op, Scheme.Γ_map_op]
congr
· dsimp [functor.op]
@@ -415,12 +406,9 @@ theorem affine_openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
erw [is_open_immersion.lift_fac_assoc] at H
exact H
tfae_have 4 → 3
- · intro H 𝒰 _ i
- skip
- apply H
+ · intro H 𝒰 _ i; skip; apply H
tfae_have 3 → 2
- · intro H
- refine' ⟨X.affine_cover, inferInstance, H _⟩
+ · intro H; refine' ⟨X.affine_cover, inferInstance, H _⟩
tfae_have 2 → 1
· rintro ⟨𝒰, _, h𝒰⟩
exact hP.source_affine_locally_of_source_open_cover f 𝒰 h𝒰
@@ -442,26 +430,20 @@ theorem openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
rw [← category.assoc]
apply H
tfae_have 4 → 3
- · intro H 𝒰 _ i
- skip
- apply H
+ · intro H 𝒰 _ i; skip; apply H
tfae_have 3 → 2
- · intro H
- refine' ⟨X.affine_cover, H _⟩
+ · intro H; refine' ⟨X.affine_cover, H _⟩
tfae_have 2 → 1
· rintro ⟨𝒰, h𝒰⟩
rw [(hP.affine_open_cover_tfae f).out 0 1]
refine' ⟨𝒰.bind fun _ => Scheme.affine_cover _, _, _⟩
- · intro i
- dsimp
- infer_instance
+ · intro i; dsimp; infer_instance
· intro i
specialize h𝒰 i.1
rw [(hP.affine_open_cover_tfae (𝒰.map i.fst ≫ f)).out 0 3] at h𝒰
erw [category.assoc]
apply @h𝒰 _ (show _ from _)
- dsimp
- infer_instance
+ dsimp; infer_instance
tfae_finish
#align ring_hom.property_is_local.open_cover_tfae RingHom.PropertyIsLocal.openCover_tFAE
@@ -530,14 +512,12 @@ theorem affineLocally_of_isOpenImmersion (hP : RingHom.PropertyIsLocal @P) {X Y
rw [← category.comp_id (f ∣_ U)]
apply hP.source_affine_locally_comp_of_is_open_immersion
rw [hP.source_affine_open_cover_iff _ (Scheme.open_cover_of_is_iso (𝟙 _))]
- · intro i
- erw [category.id_comp, op_id, Scheme.Γ.map_id]
+ · intro i; erw [category.id_comp, op_id, Scheme.Γ.map_id]
convert hP.holds_for_localization_away _ (1 : Scheme.Γ.obj _)
· exact (RingHom.algebraMap_toAlgebra _).symm
· infer_instance
· refine' IsLocalization.away_of_isUnit_of_bijective _ isUnit_one Function.bijective_id
- · intro i
- exact H
+ · intro i; exact H
#align ring_hom.property_is_local.affine_locally_of_is_open_immersion RingHom.PropertyIsLocal.affineLocally_of_isOpenImmersion
theorem affineLocally_of_comp
@@ -556,13 +536,9 @@ theorem affineLocally_of_comp
(pullback_right_pullback_fst_iso g (Z.affine_cover.map i) f).Hom
apply Scheme.pullback.open_cover_of_right
exact (pullback g (Z.affine_cover.map i)).affineCover
- have h𝒰 : ∀ i j, is_affine ((𝒰 i).obj j) := by
- dsimp
- infer_instance
+ have h𝒰 : ∀ i j, is_affine ((𝒰 i).obj j) := by dsimp; infer_instance
let 𝒰' := (Z.affine_cover.pullback_cover g).bind fun i => Scheme.affine_cover _
- have h𝒰' : ∀ i, is_affine (𝒰'.obj i) := by
- dsimp
- infer_instance
+ have h𝒰' : ∀ i, is_affine (𝒰'.obj i) := by dsimp; infer_instance
rw [hP.affine_open_cover_iff f 𝒰' fun i => Scheme.affine_cover _]
rw [hP.affine_open_cover_iff (f ≫ g) Z.affine_cover 𝒰] at h
rintro ⟨i, j⟩ k
@@ -592,9 +568,7 @@ theorem affineLocally_stableUnderComposition : (affineLocally @P).StableUnderCom
rw [hP.affine_open_cover_iff (f ≫ g) S.affine_cover _]
rotate_left
· exact 𝒰
- · intro i j
- dsimp at *
- infer_instance
+ · intro i j; dsimp at *; infer_instance
· rintro i ⟨j, k⟩
dsimp at i j k
dsimp only [Scheme.open_cover.bind_map, Scheme.open_cover.pushforward_iso_obj,
mathlib commit https://github.com/leanprover-community/mathlib/commit/33c67ae661dd8988516ff7f247b0be3018cdd952
@@ -217,7 +217,7 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
convert V.2
infer_instance
· intro H V
- specialize H ⟨_, V.2.image_isOpenImmersion (X.of_restrict _)⟩ (Subtype.coe_image_subset _ _)
+ specialize H ⟨_, V.2.imageIsOpenImmersion (X.of_restrict _)⟩ (Subtype.coe_image_subset _ _)
erw [← X.presheaf.map_comp]
rw [← hP.cancel_right_is_iso _ (X.presheaf.map (eq_to_hom _)), category.assoc, ←
X.presheaf.map_comp]
@@ -238,12 +238,12 @@ theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.Respe
U.1.OpenEmbedding ≫
f ∣_ Y.basicOpen r).op) :=
by
- specialize H ⟨_, U.2.image_isOpenImmersion (X.of_restrict _)⟩
+ specialize H ⟨_, U.2.imageIsOpenImmersion (X.of_restrict _)⟩
convert(h₁.of_restrict_morphism_restrict_iff _ _ _ _ _).mpr _ using 1
pick_goal 5
· exact h₂.away r H
· infer_instance
- · exact U.2.image_isOpenImmersion _
+ · exact U.2.imageIsOpenImmersion _
· ext1
exact (Set.preimage_image_eq _ Subtype.coe_injective).symm
#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.scheme_restrict_basicOpen_of_localizationPreserves
@@ -272,7 +272,7 @@ theorem sourceAffineLocallyIsLocal (h₁ : RingHom.RespectsIso @P)
intro V hV
rw [Scheme.preimage_basic_open] at hV
subst hV
- exact U.2.map_restrict_basicOpen (Scheme.Γ.map f.op r.1)
+ exact U.2.mapRestrictBasicOpen (Scheme.Γ.map f.op r.1)
#align algebraic_geometry.source_affine_locally_is_local AlgebraicGeometry.sourceAffineLocallyIsLocal
variable {P} (hP : RingHom.PropertyIsLocal @P)
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -378,7 +378,7 @@ theorem sourceAffineLocallyOfSourceOpenCover {X Y : Scheme} (f : X ⟶ Y) [IsAff
exact source_affine_locally_of_source_open_cover_aux hP.respects_iso hP.2 _ _ _ hs hs'
· rw [Set.eq_univ_iff_forall]
intro x
- rw [Set.mem_unionᵢ]
+ rw [Set.mem_iUnion]
exact ⟨⟨_, 𝒰.f x, rfl⟩, 𝒰.covers x⟩
· rintro ⟨_, i, rfl⟩
specialize H i
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -289,12 +289,12 @@ theorem source_affine_locally_of_source_open_cover_aux (h₁ : RingHom.RespectsI
rintro ⟨s, r, hr, hs⟩
have :=
(@Localization.algEquiv _ _ _ _ _
- (@AlgebraicGeometry.Γ_restrict_is_localization _ U.2 s)).toRingEquiv.toCommRingIso
+ (@AlgebraicGeometry.Γ_restrict_is_localization _ U.2 s)).toRingEquiv.toCommRingCatIso
refine'
(h₁.cancel_right_is_iso _
(@Localization.algEquiv _ _ _ _ _
(@AlgebraicGeometry.Γ_restrict_is_localization _ U.2
- s)).toRingEquiv.toCommRingIso.Hom).mp
+ s)).toRingEquiv.toCommRingCatIso.Hom).mp
_
subst hs
rw [CommRingCat.comp_eq_ring_hom_comp, ← RingHom.comp_assoc]
mathlib commit https://github.com/leanprover-community/mathlib/commit/9b2b58d6b14b895b2f375108e765cb47de71aebd
@@ -123,7 +123,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
congr
#align ring_hom.respects_iso.of_restrict_morphism_restrict_iff RingHom.RespectsIso.ofRestrict_morphismRestrict_iff
-theorem StableUnderBaseChange.ΓPullbackFst (hP : StableUnderBaseChange @P) (hP' : RespectsIso @P)
+theorem StableUnderBaseChange.Γ_pullback_fst (hP : StableUnderBaseChange @P) (hP' : RespectsIso @P)
{X Y S : Scheme} [IsAffine X] [IsAffine Y] [IsAffine S] (f : X ⟶ S) (g : Y ⟶ S)
(H : P (Scheme.Γ.map g.op)) : P (Scheme.Γ.map (pullback.fst : pullback f g ⟶ _).op) :=
by
@@ -143,7 +143,7 @@ theorem StableUnderBaseChange.ΓPullbackFst (hP : StableUnderBaseChange @P) (hP'
pushout_iso_unop_pullback_inl_hom (Quiver.Hom.unop _) (Quiver.Hom.unop _),
hP'.cancel_right_is_iso]
exact hP.pushout_inl _ hP' _ _ H
-#align ring_hom.stable_under_base_change.Γ_pullback_fst RingHom.StableUnderBaseChange.ΓPullbackFst
+#align ring_hom.stable_under_base_change.Γ_pullback_fst RingHom.StableUnderBaseChange.Γ_pullback_fst
end RingHom
@@ -228,7 +228,7 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
· infer_instance
#align algebraic_geometry.affine_locally_iff_affine_opens_le AlgebraicGeometry.affineLocally_iff_affineOpens_le
-theorem schemeRestrictBasicOpenOfLocalizationPreserves (h₁ : RingHom.RespectsIso @P)
+theorem scheme_restrict_basicOpen_of_localizationPreserves (h₁ : RingHom.RespectsIso @P)
(h₂ : RingHom.LocalizationPreserves @P) {X Y : Scheme} [IsAffine Y] (f : X ⟶ Y)
(r : Y.Presheaf.obj (op ⊤)) (H : sourceAffineLocally (@P) f)
(U : (X.restrict ((Opens.map f.1.base).obj <| Y.basicOpen r).OpenEmbedding).affineOpens) :
@@ -246,7 +246,7 @@ theorem schemeRestrictBasicOpenOfLocalizationPreserves (h₁ : RingHom.RespectsI
· exact U.2.image_isOpenImmersion _
· ext1
exact (Set.preimage_image_eq _ Subtype.coe_injective).symm
-#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.schemeRestrictBasicOpenOfLocalizationPreserves
+#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.scheme_restrict_basicOpen_of_localizationPreserves
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
theorem sourceAffineLocallyIsLocal (h₁ : RingHom.RespectsIso @P)
@@ -316,7 +316,7 @@ theorem source_affine_locally_of_source_open_cover_aux (h₁ : RingHom.RespectsI
· infer_instance
#align algebraic_geometry.source_affine_locally_of_source_open_cover_aux AlgebraicGeometry.source_affine_locally_of_source_open_cover_aux
-theorem isOpenImmersionCompOfSourceAffineLocally (h₁ : RingHom.RespectsIso @P) {X Y Z : Scheme}
+theorem isOpenImmersion_comp_of_sourceAffineLocally (h₁ : RingHom.RespectsIso @P) {X Y Z : Scheme}
[IsAffine X] [IsAffine Z] (f : X ⟶ Y) [IsOpenImmersion f] (g : Y ⟶ Z)
(h₂ : sourceAffineLocally (@P) g) : P (Scheme.Γ.map (f ≫ g).op) :=
by
@@ -329,7 +329,7 @@ theorem isOpenImmersionCompOfSourceAffineLocally (h₁ : RingHom.RespectsIso @P)
· infer_instance
· exact Subtype.range_coe
· infer_instance
-#align algebraic_geometry.is_open_immersion_comp_of_source_affine_locally AlgebraicGeometry.isOpenImmersionCompOfSourceAffineLocally
+#align algebraic_geometry.is_open_immersion_comp_of_source_affine_locally AlgebraicGeometry.isOpenImmersion_comp_of_sourceAffineLocally
end AlgebraicGeometry
@@ -465,10 +465,10 @@ theorem openCover_tFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
tfae_finish
#align ring_hom.property_is_local.open_cover_tfae RingHom.PropertyIsLocal.openCover_tFAE
-theorem sourceAffineLocallyCompOfIsOpenImmersion {X Y Z : Scheme.{u}} [IsAffine Z] (f : X ⟶ Y)
+theorem sourceAffineLocally_comp_of_isOpenImmersion {X Y Z : Scheme.{u}} [IsAffine Z] (f : X ⟶ Y)
(g : Y ⟶ Z) [IsOpenImmersion f] (H : sourceAffineLocally (@P) g) :
sourceAffineLocally (@P) (f ≫ g) := by apply ((hP.open_cover_tfae g).out 0 3).mp H
-#align ring_hom.property_is_local.source_affine_locally_comp_of_is_open_immersion RingHom.PropertyIsLocal.sourceAffineLocallyCompOfIsOpenImmersion
+#align ring_hom.property_is_local.source_affine_locally_comp_of_is_open_immersion RingHom.PropertyIsLocal.sourceAffineLocally_comp_of_isOpenImmersion
theorem source_affine_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) [IsAffine Y]
(𝒰 : Scheme.OpenCover.{u} X) [∀ i, IsAffine (𝒰.obj i)] :
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -66,7 +66,7 @@ theorem RespectsIso.basicOpen_iff (hP : RespectsIso @P) {X Y : Scheme} [IsAffine
congr
delta IsLocalization.Away.map
refine' IsLocalization.ringHom_ext (Submonoid.powers r) _
- convert (IsLocalization.map_comp _).symm using 1
+ convert(IsLocalization.map_comp _).symm using 1
change Y.presheaf.map _ ≫ _ = _ ≫ X.presheaf.map _
rw [f.val.c.naturality_assoc]
erw [← X.presheaf.map_comp]
@@ -90,7 +90,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
P (Localization.awayMap (Scheme.Γ.map (X.of_restrict U.OpenEmbedding ≫ f).op) r) :=
by
subst e
- convert (hP.is_localization_away_iff _ _ _ _).symm
+ convert(hP.is_localization_away_iff _ _ _ _).symm
rotate_left
· infer_instance
· apply RingHom.toAlgebra
@@ -106,7 +106,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
dsimp [Scheme.Γ_obj_op, Scheme.Γ_map_op, Scheme.restrict]
apply AlgebraicGeometry.is_localization_of_eq_basicOpen _ hU
rw [opens.open_embedding_obj_top, opens.functor_obj_map_obj]
- convert (X.basic_open_res (Scheme.Γ.map f.op r) (hom_of_le le_top).op).symm using 1
+ convert(X.basic_open_res (Scheme.Γ.map f.op r) (hom_of_le le_top).op).symm using 1
rw [opens.open_embedding_obj_top, opens.open_embedding_obj_top, inf_comm, Scheme.Γ_map_op, ←
Scheme.preimage_basic_open]
· apply IsLocalization.ringHom_ext (Submonoid.powers r) _
@@ -239,7 +239,7 @@ theorem schemeRestrictBasicOpenOfLocalizationPreserves (h₁ : RingHom.RespectsI
f ∣_ Y.basicOpen r).op) :=
by
specialize H ⟨_, U.2.image_isOpenImmersion (X.of_restrict _)⟩
- convert (h₁.of_restrict_morphism_restrict_iff _ _ _ _ _).mpr _ using 1
+ convert(h₁.of_restrict_morphism_restrict_iff _ _ _ _ _).mpr _ using 1
pick_goal 5
· exact h₂.away r H
· infer_instance
@@ -366,8 +366,8 @@ theorem sourceAffineLocallyOfSourceOpenCover {X Y : Scheme} (f : X ⟶ Y) [IsAff
refine' Eq.trans _ (X.presheaf.map_comp _ _)
change X.presheaf.map _ = _
congr
- convert
- hP.holds_for_localization_away _ (X.presheaf.map (eq_to_hom U.1.openEmbedding_obj_top).op r)
+ convert hP.holds_for_localization_away _
+ (X.presheaf.map (eq_to_hom U.1.openEmbedding_obj_top).op r)
· exact (RingHom.algebraMap_toAlgebra _).symm
· dsimp [Scheme.Γ]
have := U.2
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -248,7 +248,7 @@ theorem schemeRestrictBasicOpenOfLocalizationPreserves (h₁ : RingHom.RespectsI
exact (Set.preimage_image_eq _ Subtype.coe_injective).symm
#align algebraic_geometry.Scheme_restrict_basic_open_of_localization_preserves AlgebraicGeometry.schemeRestrictBasicOpenOfLocalizationPreserves
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (V «expr = » (opens.map f.val.base).obj (Y.basic_open r.val)) -/
theorem sourceAffineLocallyIsLocal (h₁ : RingHom.RespectsIso @P)
(h₂ : RingHom.LocalizationPreserves @P) (h₃ : RingHom.OfLocalizationSpan @P) :
(sourceAffineLocally @P).IsLocal := by
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -180,25 +180,25 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
erw [Subtype.range_val]
convert e
have := H ⟨(Opens.map (X.ofRestrict U'.openEmbedding).1.base).obj V.1, ?h'⟩
- erw [← X.presheaf.map_comp] at this
- rw [← hP.cancel_right_isIso _ (X.presheaf.map (eqToHom _)), Category.assoc,
- ← X.presheaf.map_comp]
- convert this using 1
- dsimp only [Functor.op, unop_op]
- rw [Opens.openEmbedding_obj_top]
- congr 1
- exact e'.symm
- case h' =>
- apply (X.ofRestrict U'.openEmbedding).isAffineOpen_iff_of_isOpenImmersion.mp
- -- Porting note: was convert V.2
- erw [e']
- apply V.2
+ · erw [← X.presheaf.map_comp] at this
+ · rw [← hP.cancel_right_isIso _ (X.presheaf.map (eqToHom _)), Category.assoc,
+ ← X.presheaf.map_comp]
+ · convert this using 1
+ dsimp only [Functor.op, unop_op]
+ rw [Opens.openEmbedding_obj_top]
+ congr 1
+ exact e'.symm
+ case h' =>
+ apply (X.ofRestrict U'.openEmbedding).isAffineOpen_iff_of_isOpenImmersion.mp
+ -- Porting note: was convert V.2
+ erw [e']
+ apply V.2
· intro H V
specialize H ⟨_, V.2.imageIsOpenImmersion (X.ofRestrict _)⟩ (Subtype.coe_image_subset _ _)
erw [← X.presheaf.map_comp]
rw [← hP.cancel_right_isIso _ (X.presheaf.map (eqToHom _)), Category.assoc, ←
X.presheaf.map_comp]
- convert H
+ · convert H
· dsimp only [Functor.op, unop_op]; rw [Opens.openEmbedding_obj_top]
#align algebraic_geometry.affine_locally_iff_affine_opens_le AlgebraicGeometry.affineLocally_iff_affineOpens_le
@@ -230,16 +230,16 @@ theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso @P)
apply h₃ _ _ hs
intro r
have := hs' r ⟨(Opens.map (X.ofRestrict _).1.base).obj U.1, ?_⟩
- rwa [h₁.ofRestrict_morphismRestrict_iff] at this
- · exact U.2
- · rfl
- · suffices ∀ (V) (_ : V = (Opens.map f.val.base).obj (Y.basicOpen r.val)),
- IsAffineOpen ((Opens.map (X.ofRestrict V.openEmbedding).1.base).obj U.1) by
- exact this _ rfl
- intro V hV
- rw [Scheme.preimage_basicOpen] at hV
- subst hV
- exact U.2.mapRestrictBasicOpen (Scheme.Γ.map f.op r.1)
+ · rwa [h₁.ofRestrict_morphismRestrict_iff] at this
+ · exact U.2
+ · rfl
+ · suffices ∀ (V) (_ : V = (Opens.map f.val.base).obj (Y.basicOpen r.val)),
+ IsAffineOpen ((Opens.map (X.ofRestrict V.openEmbedding).1.base).obj U.1) by
+ exact this _ rfl
+ intro V hV
+ rw [Scheme.preimage_basicOpen] at hV
+ subst hV
+ exact U.2.mapRestrictBasicOpen (Scheme.Γ.map f.op r.1)
#align algebraic_geometry.source_affine_locally_is_local AlgebraicGeometry.sourceAffineLocally_isLocal
variable (hP : RingHom.PropertyIsLocal @P)
@@ -271,9 +271,9 @@ theorem isOpenImmersionCat_comp_of_sourceAffineLocally (h₁ : RingHom.RespectsI
rw [← h₁.cancel_right_isIso _
(Scheme.Γ.map (IsOpenImmersion.isoOfRangeEq (Y.ofRestrict _) f _).hom.op),
← Functor.map_comp, ← op_comp]
- convert h₂ ⟨_, rangeIsAffineOpenOfOpenImmersion f⟩ using 3
- · rw [IsOpenImmersion.isoOfRangeEq_hom_fac_assoc]
- exact Subtype.range_coe
+ · convert h₂ ⟨_, rangeIsAffineOpenOfOpenImmersion f⟩ using 3
+ · rw [IsOpenImmersion.isoOfRangeEq_hom_fac_assoc]
+ exact Subtype.range_coe
#align algebraic_geometry.is_open_immersion_comp_of_source_affine_locally AlgebraicGeometry.isOpenImmersionCat_comp_of_sourceAffineLocally
end AlgebraicGeometry
The type class MorphismProperty.HasTwoOutOfThreeProperty
is introduced. The structure StableUnderComposition
is also changed into a type class IsStableUnderComposition
.
Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>
@@ -549,47 +549,47 @@ theorem affineLocally_of_comp
exact h
#align ring_hom.property_is_local.affine_locally_of_comp RingHom.PropertyIsLocal.affineLocally_of_comp
-theorem affineLocally_stableUnderComposition : (affineLocally @P).StableUnderComposition := by
- intro X Y S f g hf hg
- let 𝒰 : ∀ i, ((S.affineCover.pullbackCover (f ≫ g)).obj i).OpenCover := by
- intro i
- refine' Scheme.OpenCover.bind _ fun i => Scheme.affineCover _
- apply Scheme.OpenCover.pushforwardIso _
- (pullbackRightPullbackFstIso g (S.affineCover.map i) f).hom
- apply Scheme.Pullback.openCoverOfRight
- exact (pullback g (S.affineCover.map i)).affineCover
- -- Porting note: used to be - rw [hP.affine_openCover_iff (f ≫ g) S.affineCover _] - but
- -- metavariables cause problems in the instance search
- apply (@affine_openCover_iff _ hP _ _ (f ≫ g) S.affineCover _ ?_ ?_).mpr
- rotate_left
- · exact 𝒰
- · intro i j; dsimp [𝒰] at *; infer_instance
- · rintro i ⟨j, k⟩
- dsimp at i j k
- dsimp only [𝒰, Scheme.OpenCover.bind_map, Scheme.OpenCover.pushforwardIso_obj,
- Scheme.Pullback.openCoverOfRight_obj, Scheme.OpenCover.pushforwardIso_map,
- Scheme.Pullback.openCoverOfRight_map, Scheme.OpenCover.bind_obj]
- rw [Category.assoc, Category.assoc, pullbackRightPullbackFstIso_hom_snd,
- pullback.lift_snd_assoc, Category.assoc, ← Category.assoc, op_comp, Functor.map_comp]
- apply hP.StableUnderComposition
- · -- Porting note: used to be exact _|>. hg i j but that can't find an instance
- apply hP.affine_openCover_iff _ _ _|>.mp
- exact hg
- · delta affineLocally at hf
- -- Porting note: again strange behavior of TFAE
- have := (hP.isLocal_sourceAffineLocally.affine_openCover_TFAE f).out 0 3
- rw [this] at hf
- -- Porting note: needed to help Lean with this instance (same as above)
- have : IsOpenImmersion <|
- ((pullback g (S.affineCover.map i)).affineCover.map j ≫ pullback.fst) :=
- LocallyRingedSpace.IsOpenImmersion.comp _ _
- specialize hf ((pullback g (S.affineCover.map i)).affineCover.map j ≫ pullback.fst)
- -- Porting note: again strange behavior of TFAE
- have := (hP.affine_openCover_TFAE
- (pullback.snd : pullback f ((pullback g (S.affineCover.map i)).affineCover.map j ≫
- pullback.fst) ⟶ _)).out 0 3
- rw [this] at hf
- apply hf
-#align ring_hom.property_is_local.affine_locally_stable_under_composition RingHom.PropertyIsLocal.affineLocally_stableUnderComposition
+theorem affineLocally_isStableUnderComposition : (affineLocally @P).IsStableUnderComposition where
+ comp_mem {X Y S} f g hf hg := by
+ let 𝒰 : ∀ i, ((S.affineCover.pullbackCover (f ≫ g)).obj i).OpenCover := by
+ intro i
+ refine' Scheme.OpenCover.bind _ fun i => Scheme.affineCover _
+ apply Scheme.OpenCover.pushforwardIso _
+ (pullbackRightPullbackFstIso g (S.affineCover.map i) f).hom
+ apply Scheme.Pullback.openCoverOfRight
+ exact (pullback g (S.affineCover.map i)).affineCover
+ -- Porting note: used to be - rw [hP.affine_openCover_iff (f ≫ g) S.affineCover _] - but
+ -- metavariables cause problems in the instance search
+ apply (@affine_openCover_iff _ hP _ _ (f ≫ g) S.affineCover _ ?_ ?_).mpr
+ rotate_left
+ · exact 𝒰
+ · intro i j; dsimp [𝒰] at *; infer_instance
+ · rintro i ⟨j, k⟩
+ dsimp at i j k
+ dsimp only [𝒰, Scheme.OpenCover.bind_map, Scheme.OpenCover.pushforwardIso_obj,
+ Scheme.Pullback.openCoverOfRight_obj, Scheme.OpenCover.pushforwardIso_map,
+ Scheme.Pullback.openCoverOfRight_map, Scheme.OpenCover.bind_obj]
+ rw [Category.assoc, Category.assoc, pullbackRightPullbackFstIso_hom_snd,
+ pullback.lift_snd_assoc, Category.assoc, ← Category.assoc, op_comp, Functor.map_comp]
+ apply hP.StableUnderComposition
+ · -- Porting note: used to be exact _|>. hg i j but that can't find an instance
+ apply hP.affine_openCover_iff _ _ _|>.mp
+ exact hg
+ · delta affineLocally at hf
+ -- Porting note: again strange behavior of TFAE
+ have := (hP.isLocal_sourceAffineLocally.affine_openCover_TFAE f).out 0 3
+ rw [this] at hf
+ -- Porting note: needed to help Lean with this instance (same as above)
+ have : IsOpenImmersion <|
+ ((pullback g (S.affineCover.map i)).affineCover.map j ≫ pullback.fst) :=
+ LocallyRingedSpace.IsOpenImmersion.comp _ _
+ specialize hf ((pullback g (S.affineCover.map i)).affineCover.map j ≫ pullback.fst)
+ -- Porting note: again strange behavior of TFAE
+ have := (hP.affine_openCover_TFAE
+ (pullback.snd : pullback f ((pullback g (S.affineCover.map i)).affineCover.map j ≫
+ pullback.fst) ⟶ _)).out 0 3
+ rw [this] at hf
+ apply hf
+#align ring_hom.property_is_local.affine_locally_stable_under_composition RingHom.PropertyIsLocal.affineLocally_isStableUnderComposition
end RingHom.PropertyIsLocal
generalize_proofs
handle proofs under binders (#12472)
The generalize_proofs
tactic had a bug where it would not generalize proofs that appeared under binders correctly, creating terms with fvars from the wrong context. The tactic has been refactored, and it now abstracts the proofs (universally quantifying all the bound variables that appear in the proof) before lifting them to the local context.
This feature can be controlled with the abstract
option. Using generalize_proofs (config := { abstract := false })
turns off proof abstraction and leaves alone those proofs that refer to bound variables.
Other new features:
generalize_proofs at h
for a let-bound local hypothesis h
will clear its value.generalize_proofs at h
for a duplicate proposition will eliminate h
from the local context.generalize_proofs (config := { maxDepth := 0 })
.generalize_proofs at h
will no longer generalize proofs from the goal.inferType
. This gives local hypotheses in more useful forms.(This PR serves as a followup to this comment.)
@@ -57,11 +57,11 @@ theorem RespectsIso.basicOpen_iff (hP : RespectsIso @P) {X Y : Scheme} [IsAffine
congr
delta IsLocalization.Away.map
refine' IsLocalization.ringHom_ext (Submonoid.powers r) _
- generalize_proofs h1 h2 h3
+ generalize_proofs
haveI i1 := @isLocalization_away_of_isAffine X _ (Scheme.Γ.map f.op r)
-- Porting note: needs to be very explicit here
convert
- (@IsLocalization.map_comp (hy := h3) (Y.presheaf.obj <| Opposite.op (Scheme.basicOpen Y r))
+ (@IsLocalization.map_comp (hy := ‹_ ≤ _›) (Y.presheaf.obj <| Opposite.op (Scheme.basicOpen Y r))
_ _ (isLocalization_away_of_isAffine _) _ _ _ i1).symm using 1
change Y.presheaf.map _ ≫ _ = _ ≫ X.presheaf.map _
rw [f.val.c.naturality_assoc]
refine
to exact
in files where it speeds up (#11896)
See #11890 and this Zulip discussion for an in-depth explanation of why these refine
s and not others.
The short answer is that the files in which these replacements took place were more performant after the change than before.
@@ -365,7 +365,7 @@ theorem affine_openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
tfae_have 4 → 3
· intro H 𝒰 _ i; apply H
tfae_have 3 → 2
- · intro H; refine' ⟨X.affineCover, inferInstance, H _⟩
+ · intro H; exact ⟨X.affineCover, inferInstance, H _⟩
tfae_have 2 → 1
· rintro ⟨𝒰, _, h𝒰⟩
exact sourceAffineLocally_of_source_openCover hP f 𝒰 h𝒰
@@ -392,7 +392,7 @@ theorem openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
tfae_have 4 → 3
· intro H 𝒰 _ i; apply H
tfae_have 3 → 2
- · intro H; refine' ⟨X.affineCover, H _⟩
+ · intro H; exact ⟨X.affineCover, H _⟩
tfae_have 2 → 1
· rintro ⟨𝒰, h𝒰⟩
-- Porting note: this has metavariable if I put it directly into rw
@@ -505,7 +505,7 @@ theorem affineLocally_of_isOpenImmersion (hP : RingHom.PropertyIsLocal @P) {X Y
convert @this esto eso _ _ ?_ ?_ ?_
· exact 1
-- Porting note: again we have to bypass TC synthesis to keep Lean from running away
- · refine'
+ · exact
@IsLocalization.away_of_isUnit_of_bijective _ _ _ _ (_) _ isUnit_one Function.bijective_id
· intro; exact H
#align ring_hom.property_is_local.affine_locally_of_is_open_immersion RingHom.PropertyIsLocal.affineLocally_of_isOpenImmersion
All these lemmas refer to the range of some function being open/range (i.e. isOpen
or isClosed
).
@@ -287,7 +287,7 @@ variable {P} (hP : RingHom.PropertyIsLocal @P)
theorem sourceAffineLocally_of_source_openCover {X Y : Scheme} (f : X ⟶ Y) [IsAffine Y]
(𝒰 : X.OpenCover) [∀ i, IsAffine (𝒰.obj i)] (H : ∀ i, P (Scheme.Γ.map (𝒰.map i ≫ f).op)) :
sourceAffineLocally (@P) f := by
- let S i := (⟨⟨Set.range (𝒰.map i).1.base, (𝒰.IsOpen i).base_open.open_range⟩,
+ let S i := (⟨⟨Set.range (𝒰.map i).1.base, (𝒰.IsOpen i).base_open.isOpen_range⟩,
rangeIsAffineOpenOfOpenImmersion (𝒰.map i)⟩ : X.affineOpens)
intro U
-- Porting note: here is what we are eliminating into Lean
@@ -356,9 +356,9 @@ theorem affine_openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
P (Scheme.Γ.map (g ≫ f).op)] := by
tfae_have 1 → 4
· intro H U g _ hg
- specialize H ⟨⟨_, hg.base_open.open_range⟩, rangeIsAffineOpenOfOpenImmersion g⟩
+ specialize H ⟨⟨_, hg.base_open.isOpen_range⟩, rangeIsAffineOpenOfOpenImmersion g⟩
rw [← hP.respectsIso.cancel_right_isIso _ (Scheme.Γ.map (IsOpenImmersion.isoOfRangeEq g
- (X.ofRestrict (Opens.openEmbedding ⟨_, hg.base_open.open_range⟩))
+ (X.ofRestrict (Opens.openEmbedding ⟨_, hg.base_open.isOpen_range⟩))
Subtype.range_coe.symm).hom.op),
← Scheme.Γ.map_comp, ← op_comp, IsOpenImmersion.isoOfRangeEq_hom_fac_assoc] at H
exact H
@@ -227,7 +227,6 @@ theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso @P)
· introv H U
apply scheme_restrict_basicOpen_of_localizationPreserves h₁ h₂; assumption
· introv hs hs' U
- skip
apply h₃ _ _ hs
intro r
have := hs' r ⟨(Opens.map (X.ofRestrict _).1.base).obj U.1, ?_⟩
@@ -357,7 +356,6 @@ theorem affine_openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
P (Scheme.Γ.map (g ≫ f).op)] := by
tfae_have 1 → 4
· intro H U g _ hg
- skip
specialize H ⟨⟨_, hg.base_open.open_range⟩, rangeIsAffineOpenOfOpenImmersion g⟩
rw [← hP.respectsIso.cancel_right_isIso _ (Scheme.Γ.map (IsOpenImmersion.isoOfRangeEq g
(X.ofRestrict (Opens.openEmbedding ⟨_, hg.base_open.open_range⟩))
@@ -365,7 +363,7 @@ theorem affine_openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
← Scheme.Γ.map_comp, ← op_comp, IsOpenImmersion.isoOfRangeEq_hom_fac_assoc] at H
exact H
tfae_have 4 → 3
- · intro H 𝒰 _ i; skip; apply H
+ · intro H 𝒰 _ i; apply H
tfae_have 3 → 2
· intro H; refine' ⟨X.affineCover, inferInstance, H _⟩
tfae_have 2 → 1
@@ -382,7 +380,6 @@ theorem openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
∀ {U : Scheme} (g : U ⟶ X) [IsOpenImmersion g], sourceAffineLocally (@P) (g ≫ f)] := by
tfae_have 1 → 4
· intro H U g hg V
- skip
-- Porting note: this has metavariable if I put it directly into rw
have := (hP.affine_openCover_TFAE f).out 0 3
rw [this] at H
@@ -393,7 +390,7 @@ theorem openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
LocallyRingedSpace.IsOpenImmersion.comp _ _
apply H
tfae_have 4 → 3
- · intro H 𝒰 _ i; skip; apply H
+ · intro H 𝒰 _ i; apply H
tfae_have 3 → 2
· intro H; refine' ⟨X.affineCover, H _⟩
tfae_have 2 → 1
@@ -104,7 +104,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
theorem StableUnderBaseChange.Γ_pullback_fst (hP : StableUnderBaseChange @P) (hP' : RespectsIso @P)
{X Y S : Scheme} [IsAffine X] [IsAffine Y] [IsAffine S] (f : X ⟶ S) (g : Y ⟶ S)
(H : P (Scheme.Γ.map g.op)) : P (Scheme.Γ.map (pullback.fst : pullback f g ⟶ _).op) := by
- -- Porting note: change `rw` to `erw`
+ -- Porting note (#11224): change `rw` to `erw`
erw [← PreservesPullback.iso_inv_fst AffineScheme.forgetToScheme (AffineScheme.ofHom f)
(AffineScheme.ofHom g)]
rw [op_comp, Functor.map_comp, hP'.cancel_right_isIso, AffineScheme.forgetToScheme_map]
Deprecates RespectsIso.ofRestrict_morphismRestrict_iff_of_isAffine
in favor of the older RespectsIso.basicOpen_iff_localization
, and removes a local notation that is only used in the removed proof.
@@ -79,25 +79,8 @@ theorem RespectsIso.basicOpen_iff_localization (hP : RespectsIso @P) {X Y : Sche
rw [← hP.is_localization_away_iff]
#align ring_hom.respects_iso.basic_open_iff_localization RingHom.RespectsIso.basicOpen_iff_localization
-local notation3 "Γ(" X:10 ")" => (Prefunctor.obj (Functor.toPrefunctor Scheme.Γ) (Opposite.op X))
-
-theorem RespectsIso.ofRestrict_morphismRestrict_iff_of_isAffine (hP : RingHom.RespectsIso @P)
- {X Y : Scheme} [IsAffine X] [IsAffine Y] (f : X ⟶ Y) (r : Y.presheaf.obj (Opposite.op ⊤)) :
- P (Scheme.Γ.map (f ∣_ Y.basicOpen r).op) ↔
- P (Localization.awayMap (Scheme.Γ.map f.op) r) := by
- have : IsLocalization.Away (R := ↑Γ(X)) (Scheme.Γ.map f.op r) ↑Γ(X ∣_ᵤ f⁻¹ᵁ Y.basicOpen r) := by
- rw [Scheme.preimage_basicOpen]
- show IsLocalization.Away (R := ↑Γ(X)) (Scheme.Γ.map f.op r)
- ↑Γ(X ∣_ᵤ X.basicOpen (Scheme.Γ.map f.op r))
- infer_instance
- rw [hP.is_localization_away_iff ↑Γ(Y ∣_ᵤ Scheme.basicOpen Y r) ↑Γ(X ∣_ᵤ f⁻¹ᵁ Scheme.basicOpen Y r)
- (Scheme.Γ.map f.op) r, iff_iff_eq]
- congr 1
- apply IsLocalization.ringHom_ext (R := ↑Γ(Y)) (Submonoid.powers r) _
- rw [IsLocalization.Away.map, IsLocalization.map_comp, RingHom.algebraMap_toAlgebra,
- RingHom.algebraMap_toAlgebra]
- show Scheme.Γ.map _ ≫ Scheme.Γ.map _ = Scheme.Γ.map _ ≫ Scheme.Γ.map _
- simp_rw [← Functor.map_comp, ← op_comp, morphismRestrict_ι]
+@[deprecated] alias RespectsIso.ofRestrict_morphismRestrict_iff_of_isAffine :=
+ RespectsIso.basicOpen_iff_localization
theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P) {X Y : Scheme}
[IsAffine Y] (f : X ⟶ Y) (r : Y.presheaf.obj (Opposite.op ⊤)) (U : Opens X.carrier)
@@ -109,7 +92,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
refine (hP.cancel_right_isIso _
(Scheme.Γ.mapIso (Scheme.restrictRestrictComm _ _ _).op).inv).symm.trans ?_
haveI : IsAffine _ := hU
- rw [← hP.ofRestrict_morphismRestrict_iff_of_isAffine, iff_iff_eq]
+ rw [← hP.basicOpen_iff_localization, iff_iff_eq]
congr 1
simp only [Functor.mapIso_inv, Iso.op_inv, ← Functor.map_comp, ← op_comp, morphismRestrict_comp]
rw [← Category.assoc]
@@ -542,15 +542,15 @@ theorem affineLocally_of_comp
(pullbackRightPullbackFstIso g (Z.affineCover.map i) f).hom
apply Scheme.Pullback.openCoverOfRight
exact (pullback g (Z.affineCover.map i)).affineCover
- have h𝒰 : ∀ i j, IsAffine ((𝒰 i).obj j) := by dsimp; infer_instance
+ have h𝒰 : ∀ i j, IsAffine ((𝒰 i).obj j) := by dsimp [𝒰]; infer_instance
let 𝒰' := (Z.affineCover.pullbackCover g).bind fun i => Scheme.affineCover _
- have h𝒰' : ∀ i, IsAffine (𝒰'.obj i) := by dsimp; infer_instance
+ have h𝒰' : ∀ i, IsAffine (𝒰'.obj i) := by dsimp [𝒰']; infer_instance
rw [hP.affine_openCover_iff f 𝒰' fun i => Scheme.affineCover _]
rw [hP.affine_openCover_iff (f ≫ g) Z.affineCover 𝒰] at h
rintro ⟨i, j⟩ k
dsimp at i j k
specialize h i ⟨j, k⟩
- dsimp only [Scheme.OpenCover.bind_map, Scheme.OpenCover.pushforwardIso_obj,
+ dsimp only [𝒰, 𝒰', Scheme.OpenCover.bind_map, Scheme.OpenCover.pushforwardIso_obj,
Scheme.Pullback.openCoverOfRight_obj, Scheme.OpenCover.pushforwardIso_map,
Scheme.Pullback.openCoverOfRight_map, Scheme.OpenCover.bind_obj,
Scheme.OpenCover.pullbackCover_obj, Scheme.OpenCover.pullbackCover_map] at h ⊢
@@ -583,10 +583,10 @@ theorem affineLocally_stableUnderComposition : (affineLocally @P).StableUnderCom
apply (@affine_openCover_iff _ hP _ _ (f ≫ g) S.affineCover _ ?_ ?_).mpr
rotate_left
· exact 𝒰
- · intro i j; dsimp at *; infer_instance
+ · intro i j; dsimp [𝒰] at *; infer_instance
· rintro i ⟨j, k⟩
dsimp at i j k
- dsimp only [Scheme.OpenCover.bind_map, Scheme.OpenCover.pushforwardIso_obj,
+ dsimp only [𝒰, Scheme.OpenCover.bind_map, Scheme.OpenCover.pushforwardIso_obj,
Scheme.Pullback.openCoverOfRight_obj, Scheme.OpenCover.pushforwardIso_map,
Scheme.Pullback.openCoverOfRight_map, Scheme.OpenCover.bind_obj]
rw [Category.assoc, Category.assoc, pullbackRightPullbackFstIso_hom_snd,
In this pull request, I have systematically eliminated the leading whitespace preceding the colon (:
) within all unlabelled or unclassified porting notes. This adjustment facilitates a more efficient review process for the remaining notes by ensuring no entries are overlooked due to formatting inconsistencies.
@@ -59,7 +59,7 @@ theorem RespectsIso.basicOpen_iff (hP : RespectsIso @P) {X Y : Scheme} [IsAffine
refine' IsLocalization.ringHom_ext (Submonoid.powers r) _
generalize_proofs h1 h2 h3
haveI i1 := @isLocalization_away_of_isAffine X _ (Scheme.Γ.map f.op r)
- -- Porting note : needs to be very explicit here
+ -- Porting note: needs to be very explicit here
convert
(@IsLocalization.map_comp (hy := h3) (Y.presheaf.obj <| Opposite.op (Scheme.basicOpen Y r))
_ _ (isLocalization_away_of_isAffine _) _ _ _ i1).symm using 1
@@ -73,7 +73,7 @@ theorem RespectsIso.basicOpen_iff_localization (hP : RespectsIso @P) {X Y : Sche
[IsAffine Y] (f : X ⟶ Y) (r : Y.presheaf.obj (Opposite.op ⊤)) :
P (Scheme.Γ.map (f ∣_ Y.basicOpen r).op) ↔ P (Localization.awayMap (Scheme.Γ.map f.op) r) := by
refine (hP.basicOpen_iff _ _).trans ?_
- -- Porting note : was a one line term mode proof, but this `dsimp` is vital so the term mode
+ -- Porting note: was a one line term mode proof, but this `dsimp` is vital so the term mode
-- one liner is not possible
dsimp
rw [← hP.is_localization_away_iff]
@@ -121,7 +121,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
theorem StableUnderBaseChange.Γ_pullback_fst (hP : StableUnderBaseChange @P) (hP' : RespectsIso @P)
{X Y S : Scheme} [IsAffine X] [IsAffine Y] [IsAffine S] (f : X ⟶ S) (g : Y ⟶ S)
(H : P (Scheme.Γ.map g.op)) : P (Scheme.Γ.map (pullback.fst : pullback f g ⟶ _).op) := by
- -- Porting note : change `rw` to `erw`
+ -- Porting note: change `rw` to `erw`
erw [← PreservesPullback.iso_inv_fst AffineScheme.forgetToScheme (AffineScheme.ofHom f)
(AffineScheme.ofHom g)]
rw [op_comp, Functor.map_comp, hP'.cancel_right_isIso, AffineScheme.forgetToScheme_map]
@@ -165,7 +165,7 @@ theorem sourceAffineLocally_respectsIso (h₁ : RingHom.RespectsIso @P) :
rw [← h₁.cancel_right_isIso _ (Scheme.Γ.map (Scheme.restrictMapIso e.inv U.1).hom.op), ←
Functor.map_comp, ← op_comp]
convert H ⟨_, U.prop.map_isIso e.inv⟩ using 3
- -- Porting note : have to add this instance manually
+ -- Porting note: have to add this instance manually
haveI i1 : IsOpenImmersion
(Scheme.ofRestrict Y ((Opens.map e.inv.val.base).obj U.1).openEmbedding ≫ e.inv) :=
PresheafedSpace.IsOpenImmersion.comp _ _
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -85,8 +85,8 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff_of_isAffine (hP : RingHom.Re
{X Y : Scheme} [IsAffine X] [IsAffine Y] (f : X ⟶ Y) (r : Y.presheaf.obj (Opposite.op ⊤)) :
P (Scheme.Γ.map (f ∣_ Y.basicOpen r).op) ↔
P (Localization.awayMap (Scheme.Γ.map f.op) r) := by
- have : IsLocalization.Away (R := ↑Γ(X)) (Scheme.Γ.map f.op r) ↑Γ(X ∣_ᵤ f⁻¹ᵁ Y.basicOpen r)
- · rw [Scheme.preimage_basicOpen]
+ have : IsLocalization.Away (R := ↑Γ(X)) (Scheme.Γ.map f.op r) ↑Γ(X ∣_ᵤ f⁻¹ᵁ Y.basicOpen r) := by
+ rw [Scheme.preimage_basicOpen]
show IsLocalization.Away (R := ↑Γ(X)) (Scheme.Γ.map f.op r)
↑Γ(X ∣_ᵤ X.basicOpen (Scheme.Γ.map f.op r))
infer_instance
@@ -134,7 +134,7 @@ theorem StableUnderBaseChange.Γ_pullback_fst (hP : StableUnderBaseChange @P) (h
simp only [Quiver.Hom.unop_op, Functor.comp_map, AffineScheme.forgetToScheme_map,
Functor.op_map] at this
rw [← this, hP'.cancel_right_isIso,
- ←pushoutIsoUnopPullback_inl_hom (Quiver.Hom.unop _) (Quiver.Hom.unop _),
+ ← pushoutIsoUnopPullback_inl_hom (Quiver.Hom.unop _) (Quiver.Hom.unop _),
hP'.cancel_right_isIso]
exact hP.pushout_inl _ hP' _ _ H
#align ring_hom.stable_under_base_change.Γ_pullback_fst RingHom.StableUnderBaseChange.Γ_pullback_fst
Fixed AlgebraicGeometry/AffineSchemes.lean
, AlgebraicGeometry/Morphisms/QuasiSeparated.lean
and AlgebraicGeometry/Morphisms/RingHomProperties.lean
.
Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com> Co-authored-by: Johan Commelin <johan@commelin.net> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -206,12 +206,10 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
congr 1
exact e'.symm
case h' =>
- apply
- (@isAffineOpen_iff_of_isOpenImmersion _ _ (@Scheme.ofRestrict _ X U'.inclusion _) ?_ _).mp
+ apply (X.ofRestrict U'.openEmbedding).isAffineOpen_iff_of_isOpenImmersion.mp
-- Porting note: was convert V.2
erw [e']
apply V.2
- infer_instance
· intro H V
specialize H ⟨_, V.2.imageIsOpenImmersion (X.ofRestrict _)⟩ (Subtype.coe_image_subset _ _)
erw [← X.presheaf.map_comp]
@@ -264,46 +262,25 @@ theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso @P)
variable (hP : RingHom.PropertyIsLocal @P)
--- Porting note: the terms here are getting huge ~ 1/2 Gb for the goal midway (with `pp.explicit`)
theorem sourceAffineLocally_of_source_open_cover_aux (h₁ : RingHom.RespectsIso @P)
(h₃ : RingHom.OfLocalizationSpanTarget @P) {X Y : Scheme} (f : X ⟶ Y) (U : X.affineOpens)
(s : Set (X.presheaf.obj (op U.1))) (hs : Ideal.span s = ⊤)
- (hs' : ∀ r : s, P (Scheme.Γ.map (X.ofRestrict (X.basicOpen r.1).openEmbedding ≫ f).op)) :
- P (Scheme.Γ.map (X.ofRestrict U.1.openEmbedding ≫ f).op) := by
+ (hs' : ∀ r : s, P (Scheme.Γ.map (Scheme.ιOpens (X.basicOpen r.1) ≫ f).op)) :
+ P (Scheme.Γ.map (Scheme.ιOpens U ≫ f).op) := by
apply_fun Ideal.map (X.presheaf.map (eqToHom U.1.openEmbedding_obj_top).op) at hs
rw [Ideal.map_span, Ideal.map_top] at hs
- apply h₃ _ _ hs
+ apply h₃.ofIsLocalization h₁ _ _ hs
rintro ⟨s, r, hr, hs⟩
- refine (h₁.cancel_right_isIso _ (@Localization.algEquiv _ _ _ _ _ _
- (@AlgebraicGeometry.Γ_restrict_isLocalization _ U.2 s)).toRingEquiv.toCommRingCatIso.hom).mp ?_
+ refine ⟨_, _, _, @AlgebraicGeometry.Γ_restrict_isLocalization (X ∣_ᵤ U.1) U.2 s, ?_⟩
+ rw [RingHom.algebraMap_toAlgebra, ← CommRingCat.comp_eq_ring_hom_comp, ← Functor.map_comp,
+ ← op_comp, ← h₁.cancel_right_isIso _ (Scheme.Γ.mapIso (Scheme.restrictRestrict _ _ _).op).inv]
subst hs
- rw [CommRingCat.comp_eq_ring_hom_comp, ← RingHom.comp_assoc]
- -- Porting note: added the `dsimp only` below and a bunch of `conv`
- dsimp only [CommRingCat.of, Bundled.of]
- conv =>
- arg 1
- conv =>
- arg 1
- -- Porting note: the `erw` below is where it gets bad; previously
- -- `erw [IsLocalization.map_comp]`. ask Lean to synthesize instances and it runs away
- -- we also have to pass in one `Localization` instance now (and not before)
- erw [@IsLocalization.map_comp _ _ _ _ _ (_) _ _ (_) _ _
- (Scheme.Γ.obj (Opposite.op ((X.restrict _).restrict ((X.restrict _).basicOpen
- (X.presheaf.map (eqToHom U.1.openEmbedding_obj_top).op r)).openEmbedding)))
- _ (le_of_eq rfl) (_) (@AlgebraicGeometry.Γ_restrict_isLocalization _ U.2 _)]
- conv => rhs; rw [op_comp, Functor.map_comp]
- rw [←CommRingCat.comp_eq_ring_hom_comp, Category.assoc]
- conv => rhs; erw [← X.presheaf.map_comp]
- rw [← h₁.cancel_right_isIso _ (X.presheaf.map (eqToHom _))]
- convert hs' ⟨r, hr⟩ using 1
- · rw [Category.assoc, ← X.presheaf.map_comp]
- conv_rhs => rw [op_comp, Scheme.Γ.map_comp]
- dsimp [Functor.op]
- conv_lhs => rw [Opens.openEmbedding_obj_top]
- conv_rhs => rw [Opens.openEmbedding_obj_top]
- rw [Scheme.image_basicOpen (X.ofRestrict U.1.openEmbedding)]
- erw [PresheafedSpace.IsOpenImmersion.ofRestrict_invApp_apply]
- rw [Scheme.basicOpen_res_eq]
+ rw [← h₁.cancel_right_isIso _
+ (Scheme.Γ.mapIso (Scheme.restrictIsoOfEq _ (Scheme.map_basicOpen_map _ _ _)).op).inv]
+ simp only [Functor.mapIso_inv, Iso.op_inv, ← Functor.map_comp, ← op_comp,
+ Scheme.restrictRestrict_inv_restrict_restrict_assoc, Scheme.restrictIsoOfEq,
+ IsOpenImmersion.isoOfRangeEq_inv_fac_assoc]
+ exact hs' ⟨r, hr⟩
#align algebraic_geometry.source_affine_locally_of_source_open_cover_aux AlgebraicGeometry.sourceAffineLocally_of_source_open_cover_aux
theorem isOpenImmersionCat_comp_of_sourceAffineLocally (h₁ : RingHom.RespectsIso @P)
@@ -369,7 +346,7 @@ theorem sourceAffineLocally_of_source_openCover {X Y : Scheme} (f : X ⟶ Y) [Is
-- Porting note: the second argument of `IsLocalization.Away` is a type, and we want
-- to generate an equality, so using `typeEqs := true` to force allowing type equalities.
convert (config := {typeEqs := true, transparency := .default})
- isLocalization_basicOpen this _ using 5
+ this.isLocalization_basicOpen _ using 5
all_goals rw [Opens.openEmbedding_obj_top]; exact (Scheme.basicOpen_res_eq _ _ _).symm
· introv hs hs'
exact sourceAffineLocally_of_source_open_cover_aux hP.respectsIso hP.2 _ _ _ hs hs'
I don't really understand this file, but I was bothered by the sole declaration requiring more than a million heartbeats. I noticed strategically adding a few conv
s can make sourceAffineLocally_of_source_open_cover_aux
not require a bump.
@@ -265,7 +265,6 @@ theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso @P)
variable (hP : RingHom.PropertyIsLocal @P)
-- Porting note: the terms here are getting huge ~ 1/2 Gb for the goal midway (with `pp.explicit`)
-set_option maxHeartbeats 4000000 in
theorem sourceAffineLocally_of_source_open_cover_aux (h₁ : RingHom.RespectsIso @P)
(h₃ : RingHom.OfLocalizationSpanTarget @P) {X Y : Scheme} (f : X ⟶ Y) (U : X.affineOpens)
(s : Set (X.presheaf.obj (op U.1))) (hs : Ideal.span s = ⊤)
@@ -275,38 +274,36 @@ theorem sourceAffineLocally_of_source_open_cover_aux (h₁ : RingHom.RespectsIso
rw [Ideal.map_span, Ideal.map_top] at hs
apply h₃ _ _ hs
rintro ⟨s, r, hr, hs⟩
- have := (@Localization.algEquiv _ _ _ _ _ _
- (@AlgebraicGeometry.Γ_restrict_isLocalization _ U.2 s)).toRingEquiv.toCommRingCatIso
refine (h₁.cancel_right_isIso _ (@Localization.algEquiv _ _ _ _ _ _
(@AlgebraicGeometry.Γ_restrict_isLocalization _ U.2 s)).toRingEquiv.toCommRingCatIso.hom).mp ?_
subst hs
rw [CommRingCat.comp_eq_ring_hom_comp, ← RingHom.comp_assoc]
- -- Porting note: here is where it gets bad; previously `erw [IsLocalization.map_comp]`
- -- ask Lean to synthesize instances and it runs away
- -- we also have to pass in one `Localization` instance now (and not before)
- erw [@IsLocalization.map_comp _ _ _ _ _ (_)
- (Scheme.Γ.obj (Opposite.op (X.restrict U.1.openEmbedding))) _ (_) _
- (Submonoid.powers (X.presheaf.map (eqToHom U.1.openEmbedding_obj_top).op r))
- ((Scheme.Γ.obj (Opposite.op ((X.restrict U.1.openEmbedding).restrict
- ((X.restrict U.1.openEmbedding).basicOpen (X.presheaf.map
- (eqToHom U.1.openEmbedding_obj_top).op r)).openEmbedding)))) _ (le_of_eq rfl) (_)
- (@AlgebraicGeometry.Γ_restrict_isLocalization _ U.2 _)]
- erw [RingHom.comp_id]
- rw [RingHom.algebraMap_toAlgebra, op_comp, Functor.map_comp, ←CommRingCat.comp_eq_ring_hom_comp,
- Scheme.Γ_map_op, Scheme.Γ_map_op, Scheme.Γ_map_op, Category.assoc]
- erw [← X.presheaf.map_comp]
+ -- Porting note: added the `dsimp only` below and a bunch of `conv`
+ dsimp only [CommRingCat.of, Bundled.of]
+ conv =>
+ arg 1
+ conv =>
+ arg 1
+ -- Porting note: the `erw` below is where it gets bad; previously
+ -- `erw [IsLocalization.map_comp]`. ask Lean to synthesize instances and it runs away
+ -- we also have to pass in one `Localization` instance now (and not before)
+ erw [@IsLocalization.map_comp _ _ _ _ _ (_) _ _ (_) _ _
+ (Scheme.Γ.obj (Opposite.op ((X.restrict _).restrict ((X.restrict _).basicOpen
+ (X.presheaf.map (eqToHom U.1.openEmbedding_obj_top).op r)).openEmbedding)))
+ _ (le_of_eq rfl) (_) (@AlgebraicGeometry.Γ_restrict_isLocalization _ U.2 _)]
+ conv => rhs; rw [op_comp, Functor.map_comp]
+ rw [←CommRingCat.comp_eq_ring_hom_comp, Category.assoc]
+ conv => rhs; erw [← X.presheaf.map_comp]
rw [← h₁.cancel_right_isIso _ (X.presheaf.map (eqToHom _))]
convert hs' ⟨r, hr⟩ using 1
- · erw [Category.assoc]
- rw [← X.presheaf.map_comp, op_comp, Scheme.Γ.map_comp, Scheme.Γ_map_op, Scheme.Γ_map_op]
- congr!
- all_goals
- · dsimp [Functor.op]
- conv_lhs => rw [Opens.openEmbedding_obj_top]
- conv_rhs => rw [Opens.openEmbedding_obj_top]
- erw [Scheme.image_basicOpen (X.ofRestrict U.1.openEmbedding)]
- erw [PresheafedSpace.IsOpenImmersion.ofRestrict_invApp_apply]
- rw [Scheme.basicOpen_res_eq]
+ · rw [Category.assoc, ← X.presheaf.map_comp]
+ conv_rhs => rw [op_comp, Scheme.Γ.map_comp]
+ dsimp [Functor.op]
+ conv_lhs => rw [Opens.openEmbedding_obj_top]
+ conv_rhs => rw [Opens.openEmbedding_obj_top]
+ rw [Scheme.image_basicOpen (X.ofRestrict U.1.openEmbedding)]
+ erw [PresheafedSpace.IsOpenImmersion.ofRestrict_invApp_apply]
+ rw [Scheme.basicOpen_res_eq]
#align algebraic_geometry.source_affine_locally_of_source_open_cover_aux AlgebraicGeometry.sourceAffineLocally_of_source_open_cover_aux
theorem isOpenImmersionCat_comp_of_sourceAffineLocally (h₁ : RingHom.RespectsIso @P)
@@ -79,64 +79,43 @@ theorem RespectsIso.basicOpen_iff_localization (hP : RespectsIso @P) {X Y : Sche
rw [← hP.is_localization_away_iff]
#align ring_hom.respects_iso.basic_open_iff_localization RingHom.RespectsIso.basicOpen_iff_localization
--- Porting note : the following proof has been restructured and the new limit is loco
-set_option maxHeartbeats 6000000 in
+local notation3 "Γ(" X:10 ")" => (Prefunctor.obj (Functor.toPrefunctor Scheme.Γ) (Opposite.op X))
+
+theorem RespectsIso.ofRestrict_morphismRestrict_iff_of_isAffine (hP : RingHom.RespectsIso @P)
+ {X Y : Scheme} [IsAffine X] [IsAffine Y] (f : X ⟶ Y) (r : Y.presheaf.obj (Opposite.op ⊤)) :
+ P (Scheme.Γ.map (f ∣_ Y.basicOpen r).op) ↔
+ P (Localization.awayMap (Scheme.Γ.map f.op) r) := by
+ have : IsLocalization.Away (R := ↑Γ(X)) (Scheme.Γ.map f.op r) ↑Γ(X ∣_ᵤ f⁻¹ᵁ Y.basicOpen r)
+ · rw [Scheme.preimage_basicOpen]
+ show IsLocalization.Away (R := ↑Γ(X)) (Scheme.Γ.map f.op r)
+ ↑Γ(X ∣_ᵤ X.basicOpen (Scheme.Γ.map f.op r))
+ infer_instance
+ rw [hP.is_localization_away_iff ↑Γ(Y ∣_ᵤ Scheme.basicOpen Y r) ↑Γ(X ∣_ᵤ f⁻¹ᵁ Scheme.basicOpen Y r)
+ (Scheme.Γ.map f.op) r, iff_iff_eq]
+ congr 1
+ apply IsLocalization.ringHom_ext (R := ↑Γ(Y)) (Submonoid.powers r) _
+ rw [IsLocalization.Away.map, IsLocalization.map_comp, RingHom.algebraMap_toAlgebra,
+ RingHom.algebraMap_toAlgebra]
+ show Scheme.Γ.map _ ≫ Scheme.Γ.map _ = Scheme.Γ.map _ ≫ Scheme.Γ.map _
+ simp_rw [← Functor.map_comp, ← op_comp, morphismRestrict_ι]
+
theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P) {X Y : Scheme}
[IsAffine Y] (f : X ⟶ Y) (r : Y.presheaf.obj (Opposite.op ⊤)) (U : Opens X.carrier)
(hU : IsAffineOpen U) {V : Opens _}
- (e : V = (Opens.map (X.ofRestrict ((Opens.map f.1.base).obj _).openEmbedding).1.base).obj U) :
- P (Scheme.Γ.map ((X.restrict ((Opens.map f.1.base).obj _).openEmbedding).ofRestrict
- V.openEmbedding ≫ f ∣_ Y.basicOpen r).op) ↔
- P (Localization.awayMap (Scheme.Γ.map (X.ofRestrict U.openEmbedding ≫ f).op) r) := by
+ (e : V = (Scheme.ιOpens <| f ⁻¹ᵁ Y.basicOpen r) ⁻¹ᵁ U) :
+ P (Scheme.Γ.map (Scheme.ιOpens V ≫ f ∣_ Y.basicOpen r).op) ↔
+ P (Localization.awayMap (Scheme.Γ.map (Scheme.ιOpens U ≫ f).op) r) := by
subst e
- letI a1 : Algebra (Scheme.Γ.obj (Opposite.op Y))
- (Scheme.Γ.obj (Opposite.op (Y.restrict (Y.basicOpen r).openEmbedding))) := ΓRestrictAlgebra _
- let U' := ((Opens.map (X.ofRestrict ((Opens.map f.val.base).obj
- (Y.basicOpen r)).openEmbedding).val.base).obj U).openEmbedding
- letI a2 : Algebra (Scheme.Γ.obj (Opposite.op (X.restrict U.openEmbedding)))
- (Scheme.Γ.obj <| Opposite.op <|
- (X.restrict ((Opens.map f.val.base).obj (Y.basicOpen r)).openEmbedding).restrict U') := by
- apply RingHom.toAlgebra
- refine X.presheaf.map
- (@homOfLE _ _ ((IsOpenMap.functor _).obj _) ((IsOpenMap.functor _).obj _) ?_).op
- rw [← SetLike.coe_subset_coe, Functor.op_obj]
- dsimp [Opens.inclusion]
- simp only [Set.image_univ, Set.image_subset_iff, Subtype.range_val]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [ContinuousMap.coe_mk, Subtype.range_val, ContinuousMap.coe_mk, ContinuousMap.coe_mk,
- Subtype.range_val]
- rfl
- have i1 := AlgebraicGeometry.Γ_restrict_isLocalization Y r
- have i2 : IsLocalization.Away ((Scheme.Γ.map (X.ofRestrict U.openEmbedding ≫ f).op) r)
- (Scheme.Γ.obj <| Opposite.op <|
- (X.restrict ((Opens.map f.val.base).obj (Y.basicOpen r)).openEmbedding).restrict U') := by
- rw [← U.openEmbedding_obj_top] at hU
- dsimp [Scheme.Γ_obj_op, Scheme.Γ_map_op, Scheme.restrict]
- apply AlgebraicGeometry.isLocalization_of_eq_basicOpen _ hU
- rw [Opens.openEmbedding_obj_top, Opens.functor_obj_map_obj]
- convert (X.basicOpen_res (Scheme.Γ.map f.op r) (homOfLE le_top).op).symm using 1
- rw [Opens.openEmbedding_obj_top, Opens.openEmbedding_obj_top, inf_comm, Scheme.Γ_map_op]
- -- Porting note : changed `rw` to `erw`
- erw [← Scheme.preimage_basicOpen]
- -- Porting note : have to add many explicit variables
- have := @RespectsIso.is_localization_away_iff (hP := hP) (R := Scheme.Γ.obj <| Opposite.op Y)
- (S := Scheme.Γ.obj (Opposite.op (X.restrict U.openEmbedding)))
- (R' := Scheme.Γ.obj (Opposite.op (Y.restrict (Y.basicOpen r).openEmbedding)))
- (S' := Scheme.Γ.obj <| Opposite.op <|
- (X.restrict ((Opens.map f.val.base).obj (Y.basicOpen r)).openEmbedding).restrict U')
- _ _ _ _ _ _ (Scheme.Γ.map (X.ofRestrict U.openEmbedding ≫ f).op) r
- rw [this, iff_iff_eq]
- congr 1
- apply IsLocalization.ringHom_ext (R := Scheme.Γ.obj (Opposite.op Y)) (Submonoid.powers r) _
- rw [IsLocalization.Away.map, IsLocalization.map_comp, RingHom.algebraMap_toAlgebra]
- rw [op_comp, op_comp, Functor.map_comp, Functor.map_comp]
- change _ = comp (X.presheaf.map _) _
- refine' (@Category.assoc CommRingCat _ _ _ _ _ _ _ _).symm.trans _
- refine' Eq.trans _ (@Category.assoc CommRingCat _ _ _ _ _ _ _ _)
- dsimp only [Scheme.Γ_map, Quiver.Hom.unop_op]
- rw [morphismRestrict_c_app, Category.assoc, Category.assoc, Category.assoc]
- erw [f.1.c.naturality_assoc, ← X.presheaf.map_comp, ← X.presheaf.map_comp, ← X.presheaf.map_comp]
+ refine (hP.cancel_right_isIso _
+ (Scheme.Γ.mapIso (Scheme.restrictRestrictComm _ _ _).op).inv).symm.trans ?_
+ haveI : IsAffine _ := hU
+ rw [← hP.ofRestrict_morphismRestrict_iff_of_isAffine, iff_iff_eq]
congr 1
+ simp only [Functor.mapIso_inv, Iso.op_inv, ← Functor.map_comp, ← op_comp, morphismRestrict_comp]
+ rw [← Category.assoc]
+ congr 3
+ rw [← cancel_mono (Scheme.ιOpens _), Category.assoc, Scheme.restrictRestrictComm,
+ IsOpenImmersion.isoOfRangeEq_inv_fac, morphismRestrict_ι]
#align ring_hom.respects_iso.of_restrict_morphism_restrict_iff RingHom.RespectsIso.ofRestrict_morphismRestrict_iff
theorem StableUnderBaseChange.Γ_pullback_fst (hP : StableUnderBaseChange @P) (hP' : RespectsIso @P)
@@ -190,7 +169,7 @@ theorem sourceAffineLocally_respectsIso (h₁ : RingHom.RespectsIso @P) :
haveI i1 : IsOpenImmersion
(Scheme.ofRestrict Y ((Opens.map e.inv.val.base).obj U.1).openEmbedding ≫ e.inv) :=
PresheafedSpace.IsOpenImmersion.comp _ _
- rw [IsOpenImmersion.isoOfRangeEq_hom, IsOpenImmersion.lift_fac_assoc, Category.assoc,
+ rw [IsOpenImmersion.isoOfRangeEq_hom_fac_assoc, Category.assoc,
e.inv_hom_id_assoc]
· introv H U
rw [← Category.assoc, op_comp, Functor.map_comp, h₁.cancel_left_isIso]
@@ -337,8 +316,8 @@ theorem isOpenImmersionCat_comp_of_sourceAffineLocally (h₁ : RingHom.RespectsI
(Scheme.Γ.map (IsOpenImmersion.isoOfRangeEq (Y.ofRestrict _) f _).hom.op),
← Functor.map_comp, ← op_comp]
convert h₂ ⟨_, rangeIsAffineOpenOfOpenImmersion f⟩ using 3
- · rw [IsOpenImmersion.isoOfRangeEq_hom, IsOpenImmersion.lift_fac_assoc]
- · exact Subtype.range_coe
+ · rw [IsOpenImmersion.isoOfRangeEq_hom_fac_assoc]
+ exact Subtype.range_coe
#align algebraic_geometry.is_open_immersion_comp_of_source_affine_locally AlgebraicGeometry.isOpenImmersionCat_comp_of_sourceAffineLocally
end AlgebraicGeometry
@@ -407,8 +386,7 @@ theorem sourceAffineLocally_of_source_openCover {X Y : Scheme} (f : X ⟶ Y) [Is
(Scheme.Γ.map
(IsOpenImmersion.isoOfRangeEq (𝒰.map i) (X.ofRestrict (S i).1.openEmbedding)
Subtype.range_coe.symm).inv.op)] at H
- rwa [← Scheme.Γ.map_comp, ← op_comp, IsOpenImmersion.isoOfRangeEq_inv,
- IsOpenImmersion.lift_fac_assoc] at H
+ rwa [← Scheme.Γ.map_comp, ← op_comp, IsOpenImmersion.isoOfRangeEq_inv_fac_assoc] at H
#align ring_hom.property_is_local.source_affine_locally_of_source_open_cover RingHom.PropertyIsLocal.sourceAffineLocally_of_source_openCover
theorem affine_openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
@@ -427,8 +405,7 @@ theorem affine_openCover_TFAE {X Y : Scheme.{u}} [IsAffine Y] (f : X ⟶ Y) :
rw [← hP.respectsIso.cancel_right_isIso _ (Scheme.Γ.map (IsOpenImmersion.isoOfRangeEq g
(X.ofRestrict (Opens.openEmbedding ⟨_, hg.base_open.open_range⟩))
Subtype.range_coe.symm).hom.op),
- ← Scheme.Γ.map_comp, ← op_comp, IsOpenImmersion.isoOfRangeEq_hom] at H
- erw [IsOpenImmersion.lift_fac_assoc] at H
+ ← Scheme.Γ.map_comp, ← op_comp, IsOpenImmersion.isoOfRangeEq_hom_fac_assoc] at H
exact H
tfae_have 4 → 3
· intro H 𝒰 _ i; skip; apply H
Due to recent changes in core we can reduce or remove many set_option maxHeartbeats
statements.
I have tried to be careful to not leave anything too close to the line, so don't be surprised if some of these can still be reduced further.
This reduces us from 96 maxHeartbeats
statements to 44
. (There are 10 false positives in meta or testing code.)
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -579,7 +579,6 @@ theorem affineLocally_of_isOpenImmersion (hP : RingHom.PropertyIsLocal @P) {X Y
· intro; exact H
#align ring_hom.property_is_local.affine_locally_of_is_open_immersion RingHom.PropertyIsLocal.affineLocally_of_isOpenImmersion
-set_option maxHeartbeats 3000000 in
theorem affineLocally_of_comp
(H : ∀ {R S T : Type u} [CommRing R] [CommRing S] [CommRing T],
∀ (f : R →+* S) (g : S →+* T), P (g.comp f) → P g)
@@ -102,7 +102,8 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
rw [← SetLike.coe_subset_coe, Functor.op_obj]
dsimp [Opens.inclusion]
simp only [Set.image_univ, Set.image_subset_iff, Subtype.range_val]
- rw [ContinuousMap.coe_mk, Subtype.range_val, ContinuousMap.coe_mk, ContinuousMap.coe_mk,
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [ContinuousMap.coe_mk, Subtype.range_val, ContinuousMap.coe_mk, ContinuousMap.coe_mk,
Subtype.range_val]
rfl
have i1 := AlgebraicGeometry.Γ_restrict_isLocalization Y r
@@ -102,8 +102,7 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
rw [← SetLike.coe_subset_coe, Functor.op_obj]
dsimp [Opens.inclusion]
simp only [Set.image_univ, Set.image_subset_iff, Subtype.range_val]
- -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
- erw [ContinuousMap.coe_mk, Subtype.range_val, ContinuousMap.coe_mk, ContinuousMap.coe_mk,
+ rw [ContinuousMap.coe_mk, Subtype.range_val, ContinuousMap.coe_mk, ContinuousMap.coe_mk,
Subtype.range_val]
rfl
have i1 := AlgebraicGeometry.Γ_restrict_isLocalization Y r
@@ -102,7 +102,8 @@ theorem RespectsIso.ofRestrict_morphismRestrict_iff (hP : RingHom.RespectsIso @P
rw [← SetLike.coe_subset_coe, Functor.op_obj]
dsimp [Opens.inclusion]
simp only [Set.image_univ, Set.image_subset_iff, Subtype.range_val]
- rw [ContinuousMap.coe_mk, Subtype.range_val, ContinuousMap.coe_mk, ContinuousMap.coe_mk,
+ -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+ erw [ContinuousMap.coe_mk, Subtype.range_val, ContinuousMap.coe_mk, ContinuousMap.coe_mk,
Subtype.range_val]
rfl
have i1 := AlgebraicGeometry.Γ_restrict_isLocalization Y r
Set
/Finset
lemmas match lattice lemma names (#7378)
Rename union_eq_left_iff_subset
to union_eq_left
to match sup_eq_left
. Similarly for the right
and inter
versions.
@@ -213,7 +213,7 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
· intro H V e
let U' := (Opens.map f.val.base).obj U.1
have e' : U'.openEmbedding.isOpenMap.functor.obj ((Opens.map U'.inclusion).obj V.1) = V.1 := by
- ext1; refine' Set.image_preimage_eq_inter_range.trans (Set.inter_eq_left_iff_subset.mpr _)
+ ext1; refine' Set.image_preimage_eq_inter_range.trans (Set.inter_eq_left.mpr _)
erw [Subtype.range_val]
convert e
have := H ⟨(Opens.map (X.ofRestrict U'.openEmbedding).1.base).obj V.1, ?h'⟩
@@ -216,20 +216,22 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
ext1; refine' Set.image_preimage_eq_inter_range.trans (Set.inter_eq_left_iff_subset.mpr _)
erw [Subtype.range_val]
convert e
- have := H ⟨(Opens.map (X.ofRestrict U'.openEmbedding).1.base).obj V.1, ?_⟩
+ have := H ⟨(Opens.map (X.ofRestrict U'.openEmbedding).1.base).obj V.1, ?h'⟩
erw [← X.presheaf.map_comp] at this
- rw [← hP.cancel_right_isIso _ (X.presheaf.map (eqToHom _)), Category.assoc, ←
- X.presheaf.map_comp]
+ rw [← hP.cancel_right_isIso _ (X.presheaf.map (eqToHom _)), Category.assoc,
+ ← X.presheaf.map_comp]
convert this using 1
- · -- Porting note: makes instance metavariable like in Lean 3
+ dsimp only [Functor.op, unop_op]
+ rw [Opens.openEmbedding_obj_top]
+ congr 1
+ exact e'.symm
+ case h' =>
apply
(@isAffineOpen_iff_of_isOpenImmersion _ _ (@Scheme.ofRestrict _ X U'.inclusion _) ?_ _).mp
-- Porting note: was convert V.2
erw [e']
apply V.2
infer_instance
- · dsimp only [Functor.op, unop_op]; rw [Opens.openEmbedding_obj_top]
- congr 1; apply e'.symm
· intro H V
specialize H ⟨_, V.2.imageIsOpenImmersion (X.ofRestrict _)⟩ (Subtype.coe_image_subset _ _)
erw [← X.presheaf.map_comp]
@@ -283,7 +283,7 @@ theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso @P)
variable (hP : RingHom.PropertyIsLocal @P)
-- Porting note: the terms here are getting huge ~ 1/2 Gb for the goal midway (with `pp.explicit`)
-set_option maxHeartbeats 13000000 in
+set_option maxHeartbeats 4000000 in
theorem sourceAffineLocally_of_source_open_cover_aux (h₁ : RingHom.RespectsIso @P)
(h₃ : RingHom.OfLocalizationSpanTarget @P) {X Y : Scheme} (f : X ⟶ Y) (U : X.affineOpens)
(s : Set (X.presheaf.obj (op U.1))) (hs : Ideal.span s = ⊤)
use
provide last constructor argument, introduce mathlib3-like flattening use!
(#5350)
Changes:
use
now by default discharges with try with_reducible use_discharger
with a custom discharger tactic rather than try with_reducible rfl
, which makes it be closer to exists
and the use
in mathlib3. It doesn't go so far as to do try with_reducible trivial
since that involves the contradiction
tactic.use (discharger := tacticSeq...)
use
evaluation loop will try refining after constructor failure, so it can be used to fill in all arguments rather than all but the last, like in mathlib3 (closes #5072) but with the caveat that it only works so long as the last argument is not an inductive type (like Eq
).use!
, which is nearly the same as the mathlib3 use
and fills in constructor arguments along the nodes and leaves of the nested constructor expressions. This version tries refining before applying constructors, so it can be used like exact
for the last argument.The difference between mathlib3 use
and this use!
is that (1) use!
uses a different tactic to discharge goals (mathlib3 used trivial'
, which did reducible refl, but also contradiction
, which we don't emulate) (2) it does not rewrite using exists_prop
. Regarding 2, this feature seems to be less useful now that bounded existentials encode the bound using a conjunction rather than with nested existentials. We do have exists_prop
as part of use_discharger
however.
Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com>
@@ -501,8 +501,6 @@ theorem source_affine_openCover_iff {X Y : Scheme.{u}} (f : X ⟶ Y) [IsAffine Y
· have h := (hP.affine_openCover_TFAE f).out 1 0
apply h.mp
use 𝒰
- use inferInstance
- exact H
#align ring_hom.property_is_local.source_affine_open_cover_iff RingHom.PropertyIsLocal.source_affine_openCover_iff
theorem isLocal_sourceAffineLocally : (sourceAffineLocally @P).IsLocal :=
convert
infer instances from goal and allow tc failure (#6041)
Changes the way the term is elaborated so that typeclass inference is tolerated and so that instances are allowed to come from the goal without re-inferring them.
@@ -221,15 +221,15 @@ theorem affineLocally_iff_affineOpens_le (hP : RingHom.RespectsIso @P) {X Y : Sc
rw [← hP.cancel_right_isIso _ (X.presheaf.map (eqToHom _)), Category.assoc, ←
X.presheaf.map_comp]
convert this using 1
+ · -- Porting note: makes instance metavariable like in Lean 3
+ apply
+ (@isAffineOpen_iff_of_isOpenImmersion _ _ (@Scheme.ofRestrict _ X U'.inclusion _) ?_ _).mp
+ -- Porting note: was convert V.2
+ erw [e']
+ apply V.2
+ infer_instance
· dsimp only [Functor.op, unop_op]; rw [Opens.openEmbedding_obj_top]
- · congr 1; apply e'.symm
- · -- Porting note: makes instance metavariable like in Lean 3
- apply
- (@isAffineOpen_iff_of_isOpenImmersion _ _ (@Scheme.ofRestrict _ X U'.inclusion _) ?_ _).mp
- -- Porting note: was convert V.2
- erw [e']
- apply V.2
- infer_instance
+ congr 1; apply e'.symm
· intro H V
specialize H ⟨_, V.2.imageIsOpenImmersion (X.ofRestrict _)⟩ (Subtype.coe_image_subset _ _)
erw [← X.presheaf.map_comp]
@@ -2,15 +2,12 @@
Copyright (c) 2022 Andrew Yang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Andrew Yang
-
-! This file was ported from Lean 3 source module algebraic_geometry.morphisms.ring_hom_properties
-! leanprover-community/mathlib commit d39590fc8728fbf6743249802486f8c91ffe07bc
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.AlgebraicGeometry.Morphisms.Basic
import Mathlib.RingTheory.LocalProperties
+#align_import algebraic_geometry.morphisms.ring_hom_properties from "leanprover-community/mathlib"@"d39590fc8728fbf6743249802486f8c91ffe07bc"
+
/-!
# Properties of morphisms from properties of ring homs.
Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Matthew Robert Ballard <100034030+mattrobball@users.noreply.github.com> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
The unported dependencies are