algebraic_geometry.morphisms.quasi_separatedMathlib.AlgebraicGeometry.Morphisms.QuasiSeparated

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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)

(last sync)

(no changes)

chore(topology/sheaves): revert universe generalizations from #19153 (#19230)

This reverts commit 13361559.

These are just too difficult to forward port as is because of the max u v =?= max u ?v issue https://github.com/leanprover/lean4/issues/2297.

We have another candidate approach to this, using a new UnivLE typeclass, and I would prefer if we investigated that without the pressure of the port at the same time.

This will delay @hrmacbeth's plans to define meromorphic functions, perhaps.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -345,7 +345,7 @@ begin
   exact e
 end
 
-lemma exists_eq_pow_mul_of_is_compact_of_is_quasi_separated (X : Scheme.{u})
+lemma exists_eq_pow_mul_of_is_compact_of_is_quasi_separated (X : Scheme)
   (U : opens X.carrier) (hU : is_compact U.1) (hU' : is_quasi_separated U.1)
   (f : X.presheaf.obj (op U)) (x : X.presheaf.obj (op $ X.basic_open f)) :
   ∃ (n : ℕ) (y : X.presheaf.obj (op U)), y |_ X.basic_open f = (f |_ X.basic_open f) ^ n * x :=
@@ -401,7 +401,7 @@ begin
       ((X.presheaf.map (hom_of_le le_sup_left).op f) ^ (finset.univ.sup n + n₂) * y₁) =
         X.presheaf.map (hom_of_le $ inf_le_right).op
           ((X.presheaf.map (hom_of_le le_sup_right).op f) ^ (finset.univ.sup n + n₁) * y₂),
-    { fapply Top.sheaf.eq_of_locally_eq'.{(u+1) u} X.sheaf (λ i : s, i.1.1),
+    { fapply X.sheaf.eq_of_locally_eq' (λ i : s, i.1.1),
       { refine λ i, hom_of_le _, erw hs, exact le_supr _ _ },
       { exact le_of_eq hs },
       { intro i,
@@ -419,7 +419,7 @@ begin
     -- By the sheaf condition, since `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`, it can be glued into
     -- the desired section on `S ∪ U`.
     use (X.sheaf.obj_sup_iso_prod_eq_locus S U.1).inv ⟨⟨_ * _, _ * _⟩, this⟩,
-    refine Top.sheaf.eq_of_locally_eq₂.{(u+1) u} X.sheaf
+    refine X.sheaf.eq_of_locally_eq₂
       (hom_of_le (_ : X.basic_open (X.presheaf.map (hom_of_le le_sup_left).op f) ≤ _))
       (hom_of_le (_ : X.basic_open (X.presheaf.map (hom_of_le le_sup_right).op f) ≤ _)) _ _ _ _ _,
     { rw X.basic_open_res, exact inf_le_right },

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(first ported)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -104,8 +104,8 @@ theorem quasi_compact_affineProperty_iff_quasiSeparatedSpace {X Y : Scheme} [IsA
       pullback.fst ≫ X.of_restrict _
     have : is_open_immersion g := inferInstance
     have e := Homeomorph.ofEmbedding _ this.base_open.to_embedding
-    rw [is_open_immersion.range_pullback_to_base_of_left] at e 
-    erw [Subtype.range_coe, Subtype.range_coe] at e 
+    rw [is_open_immersion.range_pullback_to_base_of_left] at e
+    erw [Subtype.range_coe, Subtype.range_coe] at e
     rw [isCompact_iff_compactSpace]
     exact @Homeomorph.compactSpace _ _ (H _ _) e
   · introv H h₁ h₂
@@ -113,8 +113,8 @@ theorem quasi_compact_affineProperty_iff_quasiSeparatedSpace {X Y : Scheme} [IsA
     let g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
     have : is_open_immersion g := inferInstance
     have e := Homeomorph.ofEmbedding _ this.base_open.to_embedding
-    rw [is_open_immersion.range_pullback_to_base_of_left] at e 
-    simp_rw [isCompact_iff_compactSpace] at H 
+    rw [is_open_immersion.range_pullback_to_base_of_left] at e
+    simp_rw [isCompact_iff_compactSpace] at H
     exact
       @Homeomorph.compactSpace _ _
         (H ⟨⟨_, h₁.base_open.open_range⟩, range_is_affine_open_of_open_immersion _⟩
@@ -214,7 +214,7 @@ theorem QuasiSeparated.affine_openCover_TFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
   by
   have := quasi_compact.affine_property_is_local.diagonal_affine_open_cover_tfae f
   simp_rw [← quasi_compact_eq_affine_property, ← quasi_separated_eq_diagonal_is_quasi_compact,
-    quasi_compact_affine_property_diagonal_eq] at this 
+    quasi_compact_affine_property_diagonal_eq] at this
   exact this
 #align algebraic_geometry.quasi_separated.affine_open_cover_tfae AlgebraicGeometry.QuasiSeparated.affine_openCover_TFAE
 -/
@@ -332,7 +332,7 @@ theorem quasiSeparatedOfComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [H : Q
     QuasiSeparated f :=
   by
   rw [(quasi_separated.affine_open_cover_tfae f).out 0 1]
-  rw [(quasi_separated.affine_open_cover_tfae (f ≫ g)).out 0 2] at H 
+  rw [(quasi_separated.affine_open_cover_tfae (f ≫ g)).out 0 2] at H
   use(Z.affine_cover.pullback_cover g).bind fun x => Scheme.affine_cover _
   constructor; · intro i; dsimp; infer_instance
   rintro ⟨i, j⟩; dsimp at *
@@ -447,7 +447,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
     obtain ⟨n₂, y₂, hy₂⟩ :=
       exists_eq_pow_mul_of_is_affine_open X _ U.2 (X.presheaf.map (hom_of_le le_sup_right).op f)
         (X.presheaf.map (hom_of_le _).op x)
-    delta TopCat.Presheaf.restrictOpen TopCat.Presheaf.restrict at hy₂ 
+    delta TopCat.Presheaf.restrictOpen TopCat.Presheaf.restrict at hy₂
     swap; · rw [X.basic_open_res]; exact inf_le_right
     -- Since `S ∪ U` is quasi-separated, `S ∩ U` can be covered by finite affine opens.
     obtain ⟨s, hs', hs⟩ :=
@@ -498,12 +498,12 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
                   (finset.univ.sup n - n i) *
                 x)
             (hn i)
-        dsimp only at hn 
+        dsimp only at hn
         delta Scheme.sheaf SheafedSpace.sheaf
         simp only [← map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp, ← mul_assoc] at
           hn ⊢
-        erw [← map_mul, ← map_mul] at hn 
-        rw [← pow_add, ← pow_add, ← add_assoc, ← add_assoc, tsub_add_cancel_of_le] at hn 
+        erw [← map_mul, ← map_mul] at hn
+        rw [← pow_add, ← pow_add, ← add_assoc, ← add_assoc, tsub_add_cancel_of_le] at hn
         convert hn
         exact Finset.le_sup (Finset.mem_univ _)
     use finset.univ.sup n + n₁ + n₂
Diff
@@ -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.QuasiCompact
-import Mathbin.Topology.QuasiSeparated
+import AlgebraicGeometry.Morphisms.QuasiCompact
+import Topology.QuasiSeparated
 
 #align_import algebraic_geometry.morphisms.quasi_separated from "leanprover-community/mathlib"@"1a51edf13debfcbe223fa06b1cb353b9ed9751cc"
 
Diff
@@ -333,7 +333,7 @@ theorem quasiSeparatedOfComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [H : Q
   by
   rw [(quasi_separated.affine_open_cover_tfae f).out 0 1]
   rw [(quasi_separated.affine_open_cover_tfae (f ≫ g)).out 0 2] at H 
-  use (Z.affine_cover.pullback_cover g).bind fun x => Scheme.affine_cover _
+  use(Z.affine_cover.pullback_cover g).bind fun x => Scheme.affine_cover _
   constructor; · intro i; dsimp; infer_instance
   rintro ⟨i, j⟩; dsimp at *
   specialize H _ i
@@ -509,7 +509,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
     use finset.univ.sup n + n₁ + n₂
     -- By the sheaf condition, since `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`, it can be glued into
     -- the desired section on `S ∪ U`.
-    use (X.sheaf.obj_sup_iso_prod_eq_locus S U.1).inv ⟨⟨_ * _, _ * _⟩, this⟩
+    use(X.sheaf.obj_sup_iso_prod_eq_locus S U.1).inv ⟨⟨_ * _, _ * _⟩, this⟩
     refine'
       X.sheaf.eq_of_locally_eq₂
         (hom_of_le (_ : X.basic_open (X.presheaf.map (hom_of_le le_sup_left).op f) ≤ _))
Diff
@@ -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.quasi_separated
-! leanprover-community/mathlib commit 1a51edf13debfcbe223fa06b1cb353b9ed9751cc
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.AlgebraicGeometry.Morphisms.QuasiCompact
 import Mathbin.Topology.QuasiSeparated
 
+#align_import algebraic_geometry.morphisms.quasi_separated from "leanprover-community/mathlib"@"1a51edf13debfcbe223fa06b1cb353b9ed9751cc"
+
 /-!
 # Quasi-separated morphisms
 
Diff
@@ -229,8 +229,8 @@ theorem QuasiSeparated.is_local_at_target : PropertyIsLocalAtTarget @QuasiSepara
 #align algebraic_geometry.quasi_separated.is_local_at_target AlgebraicGeometry.QuasiSeparated.is_local_at_target
 -/
 
-#print AlgebraicGeometry.QuasiSeparated.openCover_tFAE /-
-theorem QuasiSeparated.openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
+#print AlgebraicGeometry.QuasiSeparated.openCover_TFAE /-
+theorem QuasiSeparated.openCover_TFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
     TFAE
       [QuasiSeparated f,
         ∃ 𝒰 : Scheme.OpenCover.{u} Y,
@@ -243,7 +243,7 @@ theorem QuasiSeparated.openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
         ∃ (ι : Type u) (U : ι → Opens Y.carrier) (hU : iSup U = ⊤),
           ∀ i, QuasiSeparated (f ∣_ U i)] :=
   QuasiSeparated.is_local_at_target.openCover_TFAE f
-#align algebraic_geometry.quasi_separated.open_cover_tfae AlgebraicGeometry.QuasiSeparated.openCover_tFAE
+#align algebraic_geometry.quasi_separated.open_cover_tfae AlgebraicGeometry.QuasiSeparated.openCover_TFAE
 -/
 
 #print AlgebraicGeometry.quasiSeparated_over_affine_iff /-
Diff
@@ -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.quasi_separated
-! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
+! leanprover-community/mathlib commit 1a51edf13debfcbe223fa06b1cb353b9ed9751cc
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.Topology.QuasiSeparated
 /-!
 # Quasi-separated morphisms
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 A morphism of schemes `f : X ⟶ Y` is quasi-separated if the diagonal morphism `X ⟶ X ×[Y] X` is
 quasi-compact.
 
Diff
@@ -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.quasi_separated
-! leanprover-community/mathlib commit 13361559d66b84f80b6d5a1c4a26aa5054766725
+! leanprover-community/mathlib commit 5dc6092d09e5e489106865241986f7f2ad28d4c8
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -420,7 +420,7 @@ theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme
 -/
 
 #print AlgebraicGeometry.exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated /-
-theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U : Opens X.carrier)
+theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Opens X.carrier)
     (hU : IsCompact U.1) (hU' : IsQuasiSeparated U.1) (f : X.Presheaf.obj (op U))
     (x : X.Presheaf.obj (op <| X.basicOpen f)) :
     ∃ (n : ℕ) (y : X.Presheaf.obj (op U)), y |_ X.basicOpen f = (f |_ X.basicOpen f) ^ n * x :=
@@ -487,7 +487,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
         X.presheaf.map (hom_of_le <| inf_le_right).op
           (X.presheaf.map (hom_of_le le_sup_right).op f ^ (finset.univ.sup n + n₁) * y₂) :=
       by
-      fapply TopCat.Sheaf.eq_of_locally_eq'.{u + 1, u} X.sheaf fun i : s => i.1.1
+      fapply X.sheaf.eq_of_locally_eq' fun i : s => i.1.1
       · refine' fun i => hom_of_le _; erw [hs]; exact le_iSup _ _
       · exact le_of_eq hs
       · intro i
@@ -511,7 +511,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
     -- the desired section on `S ∪ U`.
     use (X.sheaf.obj_sup_iso_prod_eq_locus S U.1).inv ⟨⟨_ * _, _ * _⟩, this⟩
     refine'
-      TopCat.Sheaf.eq_of_locally_eq₂.{u + 1, u} X.sheaf
+      X.sheaf.eq_of_locally_eq₂
         (hom_of_le (_ : X.basic_open (X.presheaf.map (hom_of_le le_sup_left).op f) ≤ _))
         (hom_of_le (_ : X.basic_open (X.presheaf.map (hom_of_le le_sup_right).op f) ≤ _)) _ _ _ _ _
     · rw [X.basic_open_res]; exact inf_le_right
Diff
@@ -44,18 +44,23 @@ namespace AlgebraicGeometry
 
 variable {X Y : Scheme.{u}} (f : X ⟶ Y)
 
+#print AlgebraicGeometry.QuasiSeparated /-
 /-- A morphism is `quasi_separated` if diagonal map is quasi-compact. -/
 @[mk_iff]
 class QuasiSeparated (f : X ⟶ Y) : Prop where
   diagonal_quasiCompact : QuasiCompact (pullback.diagonal f)
 #align algebraic_geometry.quasi_separated AlgebraicGeometry.QuasiSeparated
+-/
 
+#print AlgebraicGeometry.QuasiSeparated.affineProperty /-
 /-- The `affine_target_morphism_property` corresponding to `quasi_separated`, asserting that the
 domain is a quasi-separated scheme. -/
 def QuasiSeparated.affineProperty : AffineTargetMorphismProperty := fun X Y f _ =>
   QuasiSeparatedSpace X.carrier
 #align algebraic_geometry.quasi_separated.affine_property AlgebraicGeometry.QuasiSeparated.affineProperty
+-/
 
+#print AlgebraicGeometry.quasiSeparatedSpace_iff_affine /-
 theorem quasiSeparatedSpace_iff_affine (X : Scheme) :
     QuasiSeparatedSpace X.carrier ↔ ∀ U V : X.affineOpens, IsCompact (U ∩ V : Set X.carrier) :=
   by
@@ -83,7 +88,9 @@ theorem quasiSeparatedSpace_iff_affine (X : Scheme) :
         apply hW.union
         apply H
 #align algebraic_geometry.quasi_separated_space_iff_affine AlgebraicGeometry.quasiSeparatedSpace_iff_affine
+-/
 
+#print AlgebraicGeometry.quasi_compact_affineProperty_iff_quasiSeparatedSpace /-
 theorem quasi_compact_affineProperty_iff_quasiSeparatedSpace {X Y : Scheme} [IsAffine Y]
     (f : X ⟶ Y) : QuasiCompact.affineProperty.diagonal f ↔ QuasiSeparatedSpace X.carrier :=
   by
@@ -114,16 +121,22 @@ theorem quasi_compact_affineProperty_iff_quasiSeparatedSpace {X Y : Scheme} [IsA
           ⟨⟨_, h₂.base_open.open_range⟩, range_is_affine_open_of_open_immersion _⟩)
         e.symm
 #align algebraic_geometry.quasi_compact_affine_property_iff_quasi_separated_space AlgebraicGeometry.quasi_compact_affineProperty_iff_quasiSeparatedSpace
+-/
 
+#print AlgebraicGeometry.quasiSeparated_eq_diagonal_is_quasiCompact /-
 theorem quasiSeparated_eq_diagonal_is_quasiCompact :
     @QuasiSeparated = MorphismProperty.diagonal @QuasiCompact := by ext; exact quasi_separated_iff _
 #align algebraic_geometry.quasi_separated_eq_diagonal_is_quasi_compact AlgebraicGeometry.quasiSeparated_eq_diagonal_is_quasiCompact
+-/
 
+#print AlgebraicGeometry.quasi_compact_affineProperty_diagonal_eq /-
 theorem quasi_compact_affineProperty_diagonal_eq :
     QuasiCompact.affineProperty.diagonal = QuasiSeparated.affineProperty := by ext;
   rw [quasi_compact_affine_property_iff_quasi_separated_space]; rfl
 #align algebraic_geometry.quasi_compact_affine_property_diagonal_eq AlgebraicGeometry.quasi_compact_affineProperty_diagonal_eq
+-/
 
+#print AlgebraicGeometry.quasiSeparated_eq_affineProperty_diagonal /-
 theorem quasiSeparated_eq_affineProperty_diagonal :
     @QuasiSeparated = targetAffineLocally QuasiCompact.affineProperty.diagonal :=
   by
@@ -131,44 +144,60 @@ theorem quasiSeparated_eq_affineProperty_diagonal :
   exact
     diagonal_target_affine_locally_eq_target_affine_locally _ quasi_compact.affine_property_is_local
 #align algebraic_geometry.quasi_separated_eq_affine_property_diagonal AlgebraicGeometry.quasiSeparated_eq_affineProperty_diagonal
+-/
 
+#print AlgebraicGeometry.quasiSeparated_eq_affineProperty /-
 theorem quasiSeparated_eq_affineProperty :
     @QuasiSeparated = targetAffineLocally QuasiSeparated.affineProperty := by
   rw [quasi_separated_eq_affine_property_diagonal, quasi_compact_affine_property_diagonal_eq]
 #align algebraic_geometry.quasi_separated_eq_affine_property AlgebraicGeometry.quasiSeparated_eq_affineProperty
+-/
 
+#print AlgebraicGeometry.QuasiSeparated.affineProperty_isLocal /-
 theorem QuasiSeparated.affineProperty_isLocal : QuasiSeparated.affineProperty.IsLocal :=
   quasi_compact_affineProperty_diagonal_eq ▸ QuasiCompact.affineProperty_isLocal.diagonal
 #align algebraic_geometry.quasi_separated.affine_property_is_local AlgebraicGeometry.QuasiSeparated.affineProperty_isLocal
+-/
 
+#print AlgebraicGeometry.quasiSeparatedOfMono /-
 instance (priority := 900) quasiSeparatedOfMono {X Y : Scheme} (f : X ⟶ Y) [Mono f] :
     QuasiSeparated f :=
   ⟨inferInstance⟩
 #align algebraic_geometry.quasi_separated_of_mono AlgebraicGeometry.quasiSeparatedOfMono
+-/
 
+#print AlgebraicGeometry.quasiSeparated_stableUnderComposition /-
 theorem quasiSeparated_stableUnderComposition :
     MorphismProperty.StableUnderComposition @QuasiSeparated :=
   quasiSeparated_eq_diagonal_is_quasiCompact.symm ▸
     quasiCompact_stableUnderComposition.diagonal quasiCompact_respectsIso
       quasiCompact_stableUnderBaseChange
 #align algebraic_geometry.quasi_separated_stable_under_composition AlgebraicGeometry.quasiSeparated_stableUnderComposition
+-/
 
+#print AlgebraicGeometry.quasiSeparated_stableUnderBaseChange /-
 theorem quasiSeparated_stableUnderBaseChange :
     MorphismProperty.StableUnderBaseChange @QuasiSeparated :=
   quasiSeparated_eq_diagonal_is_quasiCompact.symm ▸
     quasiCompact_stableUnderBaseChange.diagonal quasiCompact_respectsIso
 #align algebraic_geometry.quasi_separated_stable_under_base_change AlgebraicGeometry.quasiSeparated_stableUnderBaseChange
+-/
 
+#print AlgebraicGeometry.quasiSeparatedComp /-
 instance quasiSeparatedComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [QuasiSeparated f]
     [QuasiSeparated g] : QuasiSeparated (f ≫ g) :=
   quasiSeparated_stableUnderComposition f g inferInstance inferInstance
 #align algebraic_geometry.quasi_separated_comp AlgebraicGeometry.quasiSeparatedComp
+-/
 
+#print AlgebraicGeometry.quasiSeparated_respectsIso /-
 theorem quasiSeparated_respectsIso : MorphismProperty.RespectsIso @QuasiSeparated :=
   quasiSeparated_eq_diagonal_is_quasiCompact.symm ▸ quasiCompact_respectsIso.diagonal
 #align algebraic_geometry.quasi_separated_respects_iso AlgebraicGeometry.quasiSeparated_respectsIso
+-/
 
-theorem QuasiSeparated.affine_openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
+#print AlgebraicGeometry.QuasiSeparated.affine_openCover_TFAE /-
+theorem QuasiSeparated.affine_openCover_TFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
     TFAE
       [QuasiSeparated f,
         ∃ (𝒰 : Scheme.OpenCover.{u} Y) (_ : ∀ i, IsAffine (𝒰.obj i)),
@@ -187,13 +216,17 @@ theorem QuasiSeparated.affine_openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
   simp_rw [← quasi_compact_eq_affine_property, ← quasi_separated_eq_diagonal_is_quasi_compact,
     quasi_compact_affine_property_diagonal_eq] at this 
   exact this
-#align algebraic_geometry.quasi_separated.affine_open_cover_tfae AlgebraicGeometry.QuasiSeparated.affine_openCover_tFAE
+#align algebraic_geometry.quasi_separated.affine_open_cover_tfae AlgebraicGeometry.QuasiSeparated.affine_openCover_TFAE
+-/
 
+#print AlgebraicGeometry.QuasiSeparated.is_local_at_target /-
 theorem QuasiSeparated.is_local_at_target : PropertyIsLocalAtTarget @QuasiSeparated :=
   quasiSeparated_eq_affineProperty_diagonal.symm ▸
     QuasiCompact.affineProperty_isLocal.diagonal.targetAffineLocallyIsLocal
 #align algebraic_geometry.quasi_separated.is_local_at_target AlgebraicGeometry.QuasiSeparated.is_local_at_target
+-/
 
+#print AlgebraicGeometry.QuasiSeparated.openCover_tFAE /-
 theorem QuasiSeparated.openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
     TFAE
       [QuasiSeparated f,
@@ -208,18 +241,24 @@ theorem QuasiSeparated.openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
           ∀ i, QuasiSeparated (f ∣_ U i)] :=
   QuasiSeparated.is_local_at_target.openCover_TFAE f
 #align algebraic_geometry.quasi_separated.open_cover_tfae AlgebraicGeometry.QuasiSeparated.openCover_tFAE
+-/
 
+#print AlgebraicGeometry.quasiSeparated_over_affine_iff /-
 theorem quasiSeparated_over_affine_iff {X Y : Scheme} (f : X ⟶ Y) [IsAffine Y] :
     QuasiSeparated f ↔ QuasiSeparatedSpace X.carrier := by
   rw [quasi_separated_eq_affine_property,
     quasi_separated.affine_property_is_local.affine_target_iff f, quasi_separated.affine_property]
 #align algebraic_geometry.quasi_separated_over_affine_iff AlgebraicGeometry.quasiSeparated_over_affine_iff
+-/
 
+#print AlgebraicGeometry.quasiSeparatedSpace_iff_quasiSeparated /-
 theorem quasiSeparatedSpace_iff_quasiSeparated (X : Scheme) :
     QuasiSeparatedSpace X.carrier ↔ QuasiSeparated (terminal.from X) :=
   (quasiSeparated_over_affine_iff _).symm
 #align algebraic_geometry.quasi_separated_space_iff_quasi_separated AlgebraicGeometry.quasiSeparatedSpace_iff_quasiSeparated
+-/
 
+#print AlgebraicGeometry.QuasiSeparated.affine_openCover_iff /-
 theorem QuasiSeparated.affine_openCover_iff {X Y : Scheme.{u}} (𝒰 : Scheme.OpenCover.{u} Y)
     [∀ i, IsAffine (𝒰.obj i)] (f : X ⟶ Y) :
     QuasiSeparated f ↔ ∀ i, QuasiSeparatedSpace (pullback f (𝒰.map i)).carrier :=
@@ -228,11 +267,14 @@ theorem QuasiSeparated.affine_openCover_iff {X Y : Scheme.{u}} (𝒰 : Scheme.Op
     quasi_separated.affine_property_is_local.affine_open_cover_iff f 𝒰]
   rfl
 #align algebraic_geometry.quasi_separated.affine_open_cover_iff AlgebraicGeometry.QuasiSeparated.affine_openCover_iff
+-/
 
+#print AlgebraicGeometry.QuasiSeparated.openCover_iff /-
 theorem QuasiSeparated.openCover_iff {X Y : Scheme.{u}} (𝒰 : Scheme.OpenCover.{u} Y) (f : X ⟶ Y) :
     QuasiSeparated f ↔ ∀ i, QuasiSeparated (pullback.snd : pullback f (𝒰.map i) ⟶ _) :=
   QuasiSeparated.is_local_at_target.openCover_iff f 𝒰
 #align algebraic_geometry.quasi_separated.open_cover_iff AlgebraicGeometry.QuasiSeparated.openCover_iff
+-/
 
 instance {X Y S : Scheme} (f : X ⟶ S) (g : Y ⟶ S) [QuasiSeparated g] :
     QuasiSeparated (pullback.fst : pullback f g ⟶ X) :=
@@ -246,6 +288,7 @@ instance {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [QuasiSeparated f] [QuasiS
     QuasiSeparated (f ≫ g) :=
   quasiSeparated_stableUnderComposition f g inferInstance inferInstance
 
+#print AlgebraicGeometry.quasiSeparatedSpace_of_quasiSeparated /-
 theorem quasiSeparatedSpace_of_quasiSeparated {X Y : Scheme} (f : X ⟶ Y)
     [hY : QuasiSeparatedSpace Y.carrier] [QuasiSeparated f] : QuasiSeparatedSpace X.carrier :=
   by
@@ -254,7 +297,9 @@ theorem quasiSeparatedSpace_of_quasiSeparated {X Y : Scheme} (f : X ⟶ Y)
   rw [← this]
   skip; infer_instance
 #align algebraic_geometry.quasi_separated_space_of_quasi_separated AlgebraicGeometry.quasiSeparatedSpace_of_quasiSeparated
+-/
 
+#print AlgebraicGeometry.quasiSeparatedSpace_of_isAffine /-
 instance quasiSeparatedSpace_of_isAffine (X : Scheme) [IsAffine X] :
     QuasiSeparatedSpace X.carrier := by
   constructor
@@ -271,14 +316,18 @@ instance quasiSeparatedSpace_of_isAffine (X : Scheme) [IsAffine X] :
     rw [← Scheme.basic_open_mul]
     exact ((top_is_affine_open _).basicOpenIsAffine _).IsCompact
 #align algebraic_geometry.quasi_separated_space_of_is_affine AlgebraicGeometry.quasiSeparatedSpace_of_isAffine
+-/
 
+#print AlgebraicGeometry.IsAffineOpen.isQuasiSeparated /-
 theorem IsAffineOpen.isQuasiSeparated {X : Scheme} {U : Opens X.carrier} (hU : IsAffineOpen U) :
     IsQuasiSeparated (U : Set X.carrier) :=
   by
   rw [isQuasiSeparated_iff_quasiSeparatedSpace]
   exacts [@AlgebraicGeometry.quasiSeparatedSpace_of_isAffine _ hU, U.is_open]
 #align algebraic_geometry.is_affine_open.is_quasi_separated AlgebraicGeometry.IsAffineOpen.isQuasiSeparated
+-/
 
+#print AlgebraicGeometry.quasiSeparatedOfComp /-
 theorem quasiSeparatedOfComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [H : QuasiSeparated (f ≫ g)] :
     QuasiSeparated f :=
   by
@@ -295,7 +344,9 @@ theorem quasiSeparatedOfComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [H : Q
         (pullback_right_pullback_fst_iso g (Z.affine_cover.map i) f).Hom
   · apply AlgebraicGeometry.quasiSeparatedOfMono
 #align algebraic_geometry.quasi_separated_of_comp AlgebraicGeometry.quasiSeparatedOfComp
+-/
 
+#print AlgebraicGeometry.exists_eq_pow_mul_of_isAffineOpen /-
 theorem exists_eq_pow_mul_of_isAffineOpen (X : Scheme) (U : Opens X.carrier) (hU : IsAffineOpen U)
     (f : X.Presheaf.obj (op U)) (x : X.Presheaf.obj (op <| X.basicOpen f)) :
     ∃ (n : ℕ) (y : X.Presheaf.obj (op U)), y |_ X.basicOpen f = (f |_ X.basicOpen f) ^ n * x :=
@@ -306,7 +357,9 @@ theorem exists_eq_pow_mul_of_isAffineOpen (X : Scheme) (U : Opens X.carrier) (hU
   delta TopCat.Presheaf.restrictOpen TopCat.Presheaf.restrict
   simpa [mul_comm x] using d.symm
 #align algebraic_geometry.exists_eq_pow_mul_of_is_affine_open AlgebraicGeometry.exists_eq_pow_mul_of_isAffineOpen
+-/
 
+#print AlgebraicGeometry.exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux /-
 theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme)
     (S : X.affineOpens) (U₁ U₂ : Opens X.carrier) {n₁ n₂ : ℕ} {y₁ : X.Presheaf.obj (op U₁)}
     {y₂ : X.Presheaf.obj (op U₂)} {f : X.Presheaf.obj (op <| U₁ ⊔ U₂)}
@@ -364,7 +417,9 @@ theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme
     Subtype.coe_mk] at e ⊢
   exact e
 #align algebraic_geometry.exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux AlgebraicGeometry.exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux
+-/
 
+#print AlgebraicGeometry.exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated /-
 theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U : Opens X.carrier)
     (hU : IsCompact U.1) (hU' : IsQuasiSeparated U.1) (f : X.Presheaf.obj (op U))
     (x : X.Presheaf.obj (op <| X.basicOpen f)) :
@@ -490,7 +545,9 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
           pow_add]
         erw [hy₂]; rw [← comp_apply, ← functor.map_comp]; congr
 #align algebraic_geometry.exists_eq_pow_mul_of_is_compact_of_is_quasi_separated AlgebraicGeometry.exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated
+-/
 
+#print AlgebraicGeometry.is_localization_basicOpen_of_qcqs /-
 /-- If `U` is qcqs, then `Γ(X, D(f)) ≃ Γ(X, U)_f` for every `f : Γ(X, U)`.
 This is known as the **Qcqs lemma** in [R. Vakil, *The rising sea*][RisingSea]. -/
 theorem is_localization_basicOpen_of_qcqs {X : Scheme} {U : Opens X.carrier} (hU : IsCompact U.1)
@@ -518,6 +575,7 @@ theorem is_localization_basicOpen_of_qcqs {X : Scheme} {U : Opens X.carrier} (hU
       rw [← ((RingedSpace.is_unit_res_basic_open _ f).pow n).mul_right_inj, MulZeroClass.mul_zero, ←
         map_pow, ← map_mul, e, map_zero]
 #align algebraic_geometry.is_localization_basic_open_of_qcqs AlgebraicGeometry.is_localization_basicOpen_of_qcqs
+-/
 
 end AlgebraicGeometry
 
Diff
@@ -47,7 +47,7 @@ variable {X Y : Scheme.{u}} (f : X ⟶ Y)
 /-- A morphism is `quasi_separated` if diagonal map is quasi-compact. -/
 @[mk_iff]
 class QuasiSeparated (f : X ⟶ Y) : Prop where
-  diagonalQuasiCompact : QuasiCompact (pullback.diagonal f)
+  diagonal_quasiCompact : QuasiCompact (pullback.diagonal f)
 #align algebraic_geometry.quasi_separated AlgebraicGeometry.QuasiSeparated
 
 /-- The `affine_target_morphism_property` corresponding to `quasi_separated`, asserting that the
Diff
@@ -137,9 +137,9 @@ theorem quasiSeparated_eq_affineProperty :
   rw [quasi_separated_eq_affine_property_diagonal, quasi_compact_affine_property_diagonal_eq]
 #align algebraic_geometry.quasi_separated_eq_affine_property AlgebraicGeometry.quasiSeparated_eq_affineProperty
 
-theorem QuasiSeparated.affinePropertyIsLocal : QuasiSeparated.affineProperty.IsLocal :=
-  quasi_compact_affineProperty_diagonal_eq ▸ QuasiCompact.affinePropertyIsLocal.diagonal
-#align algebraic_geometry.quasi_separated.affine_property_is_local AlgebraicGeometry.QuasiSeparated.affinePropertyIsLocal
+theorem QuasiSeparated.affineProperty_isLocal : QuasiSeparated.affineProperty.IsLocal :=
+  quasi_compact_affineProperty_diagonal_eq ▸ QuasiCompact.affineProperty_isLocal.diagonal
+#align algebraic_geometry.quasi_separated.affine_property_is_local AlgebraicGeometry.QuasiSeparated.affineProperty_isLocal
 
 instance (priority := 900) quasiSeparatedOfMono {X Y : Scheme} (f : X ⟶ Y) [Mono f] :
     QuasiSeparated f :=
@@ -189,10 +189,10 @@ theorem QuasiSeparated.affine_openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
   exact this
 #align algebraic_geometry.quasi_separated.affine_open_cover_tfae AlgebraicGeometry.QuasiSeparated.affine_openCover_tFAE
 
-theorem QuasiSeparated.isLocalAtTarget : PropertyIsLocalAtTarget @QuasiSeparated :=
+theorem QuasiSeparated.is_local_at_target : PropertyIsLocalAtTarget @QuasiSeparated :=
   quasiSeparated_eq_affineProperty_diagonal.symm ▸
-    QuasiCompact.affinePropertyIsLocal.diagonal.targetAffineLocallyIsLocal
-#align algebraic_geometry.quasi_separated.is_local_at_target AlgebraicGeometry.QuasiSeparated.isLocalAtTarget
+    QuasiCompact.affineProperty_isLocal.diagonal.targetAffineLocallyIsLocal
+#align algebraic_geometry.quasi_separated.is_local_at_target AlgebraicGeometry.QuasiSeparated.is_local_at_target
 
 theorem QuasiSeparated.openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
     TFAE
@@ -206,7 +206,7 @@ theorem QuasiSeparated.openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
           QuasiSeparated (pullback.snd : pullback f g ⟶ _),
         ∃ (ι : Type u) (U : ι → Opens Y.carrier) (hU : iSup U = ⊤),
           ∀ i, QuasiSeparated (f ∣_ U i)] :=
-  QuasiSeparated.isLocalAtTarget.openCover_tFAE f
+  QuasiSeparated.is_local_at_target.openCover_TFAE f
 #align algebraic_geometry.quasi_separated.open_cover_tfae AlgebraicGeometry.QuasiSeparated.openCover_tFAE
 
 theorem quasiSeparated_over_affine_iff {X Y : Scheme} (f : X ⟶ Y) [IsAffine Y] :
@@ -231,7 +231,7 @@ theorem QuasiSeparated.affine_openCover_iff {X Y : Scheme.{u}} (𝒰 : Scheme.Op
 
 theorem QuasiSeparated.openCover_iff {X Y : Scheme.{u}} (𝒰 : Scheme.OpenCover.{u} Y) (f : X ⟶ Y) :
     QuasiSeparated f ↔ ∀ i, QuasiSeparated (pullback.snd : pullback f (𝒰.map i) ⟶ _) :=
-  QuasiSeparated.isLocalAtTarget.openCover_iff f 𝒰
+  QuasiSeparated.is_local_at_target.openCover_iff f 𝒰
 #align algebraic_geometry.quasi_separated.open_cover_iff AlgebraicGeometry.QuasiSeparated.openCover_iff
 
 instance {X Y S : Scheme} (f : X ⟶ S) (g : Y ⟶ S) [QuasiSeparated g] :
Diff
@@ -175,7 +175,7 @@ theorem QuasiSeparated.affine_openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
           ∀ i : 𝒰.J, QuasiSeparatedSpace (pullback f (𝒰.map i)).carrier,
         ∀ (𝒰 : Scheme.OpenCover.{u} Y) [∀ i, IsAffine (𝒰.obj i)] (i : 𝒰.J),
           QuasiSeparatedSpace (pullback f (𝒰.map i)).carrier,
-        ∀ {U : Scheme} (g : U ⟶ Y) [IsAffine U] [IsOpenImmersion g],
+        ∀ {U : Scheme} (g : U ⟶ Y) [IsAffine U] [IsOpenImmersionCat g],
           QuasiSeparatedSpace (pullback f g).carrier,
         ∃ (𝒰 : Scheme.OpenCover.{u} Y) (_ : ∀ i, IsAffine (𝒰.obj i)) (𝒰' :
           ∀ i : 𝒰.J, Scheme.OpenCover.{u} (pullback f (𝒰.map i))) (_ :
@@ -202,7 +202,7 @@ theorem QuasiSeparated.openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
         ∀ (𝒰 : Scheme.OpenCover.{u} Y) (i : 𝒰.J),
           QuasiSeparated (pullback.snd : (𝒰.pullbackCover f).obj i ⟶ 𝒰.obj i),
         ∀ U : Opens Y.carrier, QuasiSeparated (f ∣_ U),
-        ∀ {U : Scheme} (g : U ⟶ Y) [IsOpenImmersion g],
+        ∀ {U : Scheme} (g : U ⟶ Y) [IsOpenImmersionCat g],
           QuasiSeparated (pullback.snd : pullback f g ⟶ _),
         ∃ (ι : Type u) (U : ι → Opens Y.carrier) (hU : iSup U = ⊤),
           ∀ i, QuasiSeparated (f ∣_ U i)] :=
Diff
@@ -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.quasi_separated
-! leanprover-community/mathlib commit d39590fc8728fbf6743249802486f8c91ffe07bc
+! leanprover-community/mathlib commit 13361559d66b84f80b6d5a1c4a26aa5054766725
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -365,7 +365,7 @@ theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme
   exact e
 #align algebraic_geometry.exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux AlgebraicGeometry.exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux
 
-theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Opens X.carrier)
+theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U : Opens X.carrier)
     (hU : IsCompact U.1) (hU' : IsQuasiSeparated U.1) (f : X.Presheaf.obj (op U))
     (x : X.Presheaf.obj (op <| X.basicOpen f)) :
     ∃ (n : ℕ) (y : X.Presheaf.obj (op U)), y |_ X.basicOpen f = (f |_ X.basicOpen f) ^ n * x :=
@@ -432,7 +432,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
         X.presheaf.map (hom_of_le <| inf_le_right).op
           (X.presheaf.map (hom_of_le le_sup_right).op f ^ (finset.univ.sup n + n₁) * y₂) :=
       by
-      fapply X.sheaf.eq_of_locally_eq' fun i : s => i.1.1
+      fapply TopCat.Sheaf.eq_of_locally_eq'.{u + 1, u} X.sheaf fun i : s => i.1.1
       · refine' fun i => hom_of_le _; erw [hs]; exact le_iSup _ _
       · exact le_of_eq hs
       · intro i
@@ -456,7 +456,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
     -- the desired section on `S ∪ U`.
     use (X.sheaf.obj_sup_iso_prod_eq_locus S U.1).inv ⟨⟨_ * _, _ * _⟩, this⟩
     refine'
-      X.sheaf.eq_of_locally_eq₂
+      TopCat.Sheaf.eq_of_locally_eq₂.{u + 1, u} X.sheaf
         (hom_of_le (_ : X.basic_open (X.presheaf.map (hom_of_le le_sup_left).op f) ≤ _))
         (hom_of_le (_ : X.basic_open (X.presheaf.map (hom_of_le le_sup_right).op f) ≤ _)) _ _ _ _ _
     · rw [X.basic_open_res]; exact inf_le_right
Diff
@@ -464,8 +464,10 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
     · rw [X.basic_open_res, X.basic_open_res]
       erw [← inf_sup_right]
       refine' le_inf_iff.mpr ⟨X.basic_open_le f, le_of_eq rfl⟩
-    · convert congr_arg (X.presheaf.map (hom_of_le _).op)
-          (X.sheaf.obj_sup_iso_prod_eq_locus_inv_fst S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using 1
+    · convert
+        congr_arg (X.presheaf.map (hom_of_le _).op)
+          (X.sheaf.obj_sup_iso_prod_eq_locus_inv_fst S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using
+        1
       · delta Scheme.sheaf SheafedSpace.sheaf
         simp only [← comp_apply (X.presheaf.map _) (X.presheaf.map _), ← functor.map_comp, ←
           op_comp]
@@ -475,8 +477,10 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
           pow_add]
         erw [hy₁]; congr 1; rw [← mul_assoc, ← mul_assoc]; congr 1
         rw [mul_comm, ← comp_apply, ← functor.map_comp]; congr
-    · convert congr_arg (X.presheaf.map (hom_of_le _).op)
-          (X.sheaf.obj_sup_iso_prod_eq_locus_inv_snd S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using 1
+    · convert
+        congr_arg (X.presheaf.map (hom_of_le _).op)
+          (X.sheaf.obj_sup_iso_prod_eq_locus_inv_snd S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using
+        1
       · delta Scheme.sheaf SheafedSpace.sheaf
         simp only [← comp_apply (X.presheaf.map _) (X.presheaf.map _), ← functor.map_comp, ←
           op_comp]
Diff
@@ -97,8 +97,8 @@ theorem quasi_compact_affineProperty_iff_quasiSeparatedSpace {X Y : Scheme} [IsA
       pullback.fst ≫ X.of_restrict _
     have : is_open_immersion g := inferInstance
     have e := Homeomorph.ofEmbedding _ this.base_open.to_embedding
-    rw [is_open_immersion.range_pullback_to_base_of_left] at e
-    erw [Subtype.range_coe, Subtype.range_coe] at e
+    rw [is_open_immersion.range_pullback_to_base_of_left] at e 
+    erw [Subtype.range_coe, Subtype.range_coe] at e 
     rw [isCompact_iff_compactSpace]
     exact @Homeomorph.compactSpace _ _ (H _ _) e
   · introv H h₁ h₂
@@ -106,8 +106,8 @@ theorem quasi_compact_affineProperty_iff_quasiSeparatedSpace {X Y : Scheme} [IsA
     let g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
     have : is_open_immersion g := inferInstance
     have e := Homeomorph.ofEmbedding _ this.base_open.to_embedding
-    rw [is_open_immersion.range_pullback_to_base_of_left] at e
-    simp_rw [isCompact_iff_compactSpace] at H
+    rw [is_open_immersion.range_pullback_to_base_of_left] at e 
+    simp_rw [isCompact_iff_compactSpace] at H 
     exact
       @Homeomorph.compactSpace _ _
         (H ⟨⟨_, h₁.base_open.open_range⟩, range_is_affine_open_of_open_immersion _⟩
@@ -171,21 +171,21 @@ theorem quasiSeparated_respectsIso : MorphismProperty.RespectsIso @QuasiSeparate
 theorem QuasiSeparated.affine_openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
     TFAE
       [QuasiSeparated f,
-        ∃ (𝒰 : Scheme.OpenCover.{u} Y)(_ : ∀ i, IsAffine (𝒰.obj i)),
+        ∃ (𝒰 : Scheme.OpenCover.{u} Y) (_ : ∀ i, IsAffine (𝒰.obj i)),
           ∀ i : 𝒰.J, QuasiSeparatedSpace (pullback f (𝒰.map i)).carrier,
         ∀ (𝒰 : Scheme.OpenCover.{u} Y) [∀ i, IsAffine (𝒰.obj i)] (i : 𝒰.J),
           QuasiSeparatedSpace (pullback f (𝒰.map i)).carrier,
         ∀ {U : Scheme} (g : U ⟶ Y) [IsAffine U] [IsOpenImmersion g],
           QuasiSeparatedSpace (pullback f g).carrier,
-        ∃ (𝒰 : Scheme.OpenCover.{u} Y)(_ : ∀ i, IsAffine (𝒰.obj i))(𝒰' :
-          ∀ i : 𝒰.J, Scheme.OpenCover.{u} (pullback f (𝒰.map i)))(_ :
+        ∃ (𝒰 : Scheme.OpenCover.{u} Y) (_ : ∀ i, IsAffine (𝒰.obj i)) (𝒰' :
+          ∀ i : 𝒰.J, Scheme.OpenCover.{u} (pullback f (𝒰.map i))) (_ :
           ∀ i j, IsAffine ((𝒰' i).obj j)),
           ∀ (i : 𝒰.J) (j k : (𝒰' i).J),
             CompactSpace (pullback ((𝒰' i).map j) ((𝒰' i).map k)).carrier] :=
   by
   have := quasi_compact.affine_property_is_local.diagonal_affine_open_cover_tfae f
   simp_rw [← quasi_compact_eq_affine_property, ← quasi_separated_eq_diagonal_is_quasi_compact,
-    quasi_compact_affine_property_diagonal_eq] at this
+    quasi_compact_affine_property_diagonal_eq] at this 
   exact this
 #align algebraic_geometry.quasi_separated.affine_open_cover_tfae AlgebraicGeometry.QuasiSeparated.affine_openCover_tFAE
 
@@ -204,7 +204,8 @@ theorem QuasiSeparated.openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
         ∀ U : Opens Y.carrier, QuasiSeparated (f ∣_ U),
         ∀ {U : Scheme} (g : U ⟶ Y) [IsOpenImmersion g],
           QuasiSeparated (pullback.snd : pullback f g ⟶ _),
-        ∃ (ι : Type u)(U : ι → Opens Y.carrier)(hU : iSup U = ⊤), ∀ i, QuasiSeparated (f ∣_ U i)] :=
+        ∃ (ι : Type u) (U : ι → Opens Y.carrier) (hU : iSup U = ⊤),
+          ∀ i, QuasiSeparated (f ∣_ U i)] :=
   QuasiSeparated.isLocalAtTarget.openCover_tFAE f
 #align algebraic_geometry.quasi_separated.open_cover_tfae AlgebraicGeometry.QuasiSeparated.openCover_tFAE
 
@@ -248,7 +249,7 @@ instance {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [QuasiSeparated f] [QuasiS
 theorem quasiSeparatedSpace_of_quasiSeparated {X Y : Scheme} (f : X ⟶ Y)
     [hY : QuasiSeparatedSpace Y.carrier] [QuasiSeparated f] : QuasiSeparatedSpace X.carrier :=
   by
-  rw [quasi_separated_space_iff_quasi_separated] at hY⊢
+  rw [quasi_separated_space_iff_quasi_separated] at hY ⊢
   have : f ≫ terminal.from Y = terminal.from X := terminal_is_terminal.hom_ext _ _
   rw [← this]
   skip; infer_instance
@@ -275,14 +276,14 @@ theorem IsAffineOpen.isQuasiSeparated {X : Scheme} {U : Opens X.carrier} (hU : I
     IsQuasiSeparated (U : Set X.carrier) :=
   by
   rw [isQuasiSeparated_iff_quasiSeparatedSpace]
-  exacts[@AlgebraicGeometry.quasiSeparatedSpace_of_isAffine _ hU, U.is_open]
+  exacts [@AlgebraicGeometry.quasiSeparatedSpace_of_isAffine _ hU, U.is_open]
 #align algebraic_geometry.is_affine_open.is_quasi_separated AlgebraicGeometry.IsAffineOpen.isQuasiSeparated
 
 theorem quasiSeparatedOfComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [H : QuasiSeparated (f ≫ g)] :
     QuasiSeparated f :=
   by
   rw [(quasi_separated.affine_open_cover_tfae f).out 0 1]
-  rw [(quasi_separated.affine_open_cover_tfae (f ≫ g)).out 0 2] at H
+  rw [(quasi_separated.affine_open_cover_tfae (f ≫ g)).out 0 2] at H 
   use (Z.affine_cover.pullback_cover g).bind fun x => Scheme.affine_cover _
   constructor; · intro i; dsimp; infer_instance
   rintro ⟨i, j⟩; dsimp at *
@@ -297,7 +298,7 @@ theorem quasiSeparatedOfComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [H : Q
 
 theorem exists_eq_pow_mul_of_isAffineOpen (X : Scheme) (U : Opens X.carrier) (hU : IsAffineOpen U)
     (f : X.Presheaf.obj (op U)) (x : X.Presheaf.obj (op <| X.basicOpen f)) :
-    ∃ (n : ℕ)(y : X.Presheaf.obj (op U)), y |_ X.basicOpen f = (f |_ X.basicOpen f) ^ n * x :=
+    ∃ (n : ℕ) (y : X.Presheaf.obj (op U)), y |_ X.basicOpen f = (f |_ X.basicOpen f) ^ n * x :=
   by
   have := (is_localization_basic_open hU f).2
   obtain ⟨⟨y, _, n, rfl⟩, d⟩ := this x
@@ -360,14 +361,14 @@ theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme
         rintro x ⟨H₁, H₂⟩; exact ⟨h₂ H₁, H₂⟩
   use n
   simp only [pow_add, map_pow, map_mul, ← comp_apply, ← mul_assoc, ← functor.map_comp,
-    Subtype.coe_mk] at e⊢
+    Subtype.coe_mk] at e ⊢
   exact e
 #align algebraic_geometry.exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux AlgebraicGeometry.exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux
 
 theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Opens X.carrier)
     (hU : IsCompact U.1) (hU' : IsQuasiSeparated U.1) (f : X.Presheaf.obj (op U))
     (x : X.Presheaf.obj (op <| X.basicOpen f)) :
-    ∃ (n : ℕ)(y : X.Presheaf.obj (op U)), y |_ X.basicOpen f = (f |_ X.basicOpen f) ^ n * x :=
+    ∃ (n : ℕ) (y : X.Presheaf.obj (op U)), y |_ X.basicOpen f = (f |_ X.basicOpen f) ^ n * x :=
   by
   delta TopCat.Presheaf.restrictOpen TopCat.Presheaf.restrict
   revert hU' f x
@@ -391,7 +392,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
     obtain ⟨n₂, y₂, hy₂⟩ :=
       exists_eq_pow_mul_of_is_affine_open X _ U.2 (X.presheaf.map (hom_of_le le_sup_right).op f)
         (X.presheaf.map (hom_of_le _).op x)
-    delta TopCat.Presheaf.restrictOpen TopCat.Presheaf.restrict at hy₂
+    delta TopCat.Presheaf.restrictOpen TopCat.Presheaf.restrict at hy₂ 
     swap; · rw [X.basic_open_res]; exact inf_le_right
     -- Since `S ∪ U` is quasi-separated, `S ∩ U` can be covered by finite affine opens.
     obtain ⟨s, hs', hs⟩ :=
@@ -442,12 +443,12 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
                   (finset.univ.sup n - n i) *
                 x)
             (hn i)
-        dsimp only at hn
+        dsimp only at hn 
         delta Scheme.sheaf SheafedSpace.sheaf
         simp only [← map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp, ← mul_assoc] at
-          hn⊢
-        erw [← map_mul, ← map_mul] at hn
-        rw [← pow_add, ← pow_add, ← add_assoc, ← add_assoc, tsub_add_cancel_of_le] at hn
+          hn ⊢
+        erw [← map_mul, ← map_mul] at hn 
+        rw [← pow_add, ← pow_add, ← add_assoc, ← add_assoc, tsub_add_cancel_of_le] at hn 
         convert hn
         exact Finset.le_sup (Finset.mem_univ _)
     use finset.univ.sup n + n₁ + n₂
Diff
@@ -38,7 +38,7 @@ open CategoryTheory CategoryTheory.Limits Opposite TopologicalSpace
 
 universe u
 
-open AlgebraicGeometry
+open scoped AlgebraicGeometry
 
 namespace AlgebraicGeometry
 
Diff
@@ -61,15 +61,12 @@ theorem quasiSeparatedSpace_iff_affine (X : Scheme) :
   by
   rw [quasiSeparatedSpace_iff]
   constructor
-  · intro H U V
-    exact H U V U.1.2 U.2.IsCompact V.1.2 V.2.IsCompact
+  · intro H U V; exact H U V U.1.2 U.2.IsCompact V.1.2 V.2.IsCompact
   · intro H
     suffices
       ∀ (U : opens X.carrier) (hU : IsCompact U.1) (V : opens X.carrier) (hV : IsCompact V.1),
         IsCompact (U ⊓ V).1
-      by
-      intro U V hU hU' hV hV'
-      exact this ⟨U, hU⟩ hU' ⟨V, hV⟩ hV'
+      by intro U V hU hU' hV hV'; exact this ⟨U, hU⟩ hU' ⟨V, hV⟩ hV'
     intro U hU V hV
     apply compact_open_induction_on V hV
     · simp
@@ -119,18 +116,12 @@ theorem quasi_compact_affineProperty_iff_quasiSeparatedSpace {X Y : Scheme} [IsA
 #align algebraic_geometry.quasi_compact_affine_property_iff_quasi_separated_space AlgebraicGeometry.quasi_compact_affineProperty_iff_quasiSeparatedSpace
 
 theorem quasiSeparated_eq_diagonal_is_quasiCompact :
-    @QuasiSeparated = MorphismProperty.diagonal @QuasiCompact :=
-  by
-  ext
-  exact quasi_separated_iff _
+    @QuasiSeparated = MorphismProperty.diagonal @QuasiCompact := by ext; exact quasi_separated_iff _
 #align algebraic_geometry.quasi_separated_eq_diagonal_is_quasi_compact AlgebraicGeometry.quasiSeparated_eq_diagonal_is_quasiCompact
 
 theorem quasi_compact_affineProperty_diagonal_eq :
-    QuasiCompact.affineProperty.diagonal = QuasiSeparated.affineProperty :=
-  by
-  ext
-  rw [quasi_compact_affine_property_iff_quasi_separated_space]
-  rfl
+    QuasiCompact.affineProperty.diagonal = QuasiSeparated.affineProperty := by ext;
+  rw [quasi_compact_affine_property_iff_quasi_separated_space]; rfl
 #align algebraic_geometry.quasi_compact_affine_property_diagonal_eq AlgebraicGeometry.quasi_compact_affineProperty_diagonal_eq
 
 theorem quasiSeparated_eq_affineProperty_diagonal :
@@ -293,10 +284,7 @@ theorem quasiSeparatedOfComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [H : Q
   rw [(quasi_separated.affine_open_cover_tfae f).out 0 1]
   rw [(quasi_separated.affine_open_cover_tfae (f ≫ g)).out 0 2] at H
   use (Z.affine_cover.pullback_cover g).bind fun x => Scheme.affine_cover _
-  constructor;
-  · intro i
-    dsimp
-    infer_instance
+  constructor; · intro i; dsimp; infer_instance
   rintro ⟨i, j⟩; dsimp at *
   specialize H _ i
   refine' @quasi_separated_space_of_quasi_separated _ H _
@@ -325,35 +313,17 @@ theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme
     (e₁ :
       X.Presheaf.map
           (homOfLE <| X.basicOpen_le (X.Presheaf.map (homOfLE le_sup_left).op f) : _ ⟶ U₁).op y₁ =
-        X.Presheaf.map
-              (homOfLE
-                  (by
-                    erw [X.basic_open_res]
-                    exact inf_le_left)).op
+        X.Presheaf.map (homOfLE (by erw [X.basic_open_res]; exact inf_le_left)).op
               (X.Presheaf.map (homOfLE le_sup_left).op f) ^
             n₁ *
-          (X.Presheaf.map
-              (homOfLE
-                  (by
-                    erw [X.basic_open_res]
-                    exact inf_le_right)).op)
-            x)
+          (X.Presheaf.map (homOfLE (by erw [X.basic_open_res]; exact inf_le_right)).op) x)
     (e₂ :
       X.Presheaf.map
           (homOfLE <| X.basicOpen_le (X.Presheaf.map (homOfLE le_sup_right).op f) : _ ⟶ U₂).op y₂ =
-        X.Presheaf.map
-              (homOfLE
-                  (by
-                    rw [X.basic_open_res]
-                    exact inf_le_left)).op
+        X.Presheaf.map (homOfLE (by rw [X.basic_open_res]; exact inf_le_left)).op
               (X.Presheaf.map (homOfLE le_sup_right).op f) ^
             n₂ *
-          (X.Presheaf.map
-              (homOfLE
-                  (by
-                    rw [X.basic_open_res]
-                    exact inf_le_right)).op)
-            x) :
+          (X.Presheaf.map (homOfLE (by rw [X.basic_open_res]; exact inf_le_right)).op) x) :
     ∃ n : ℕ,
       X.Presheaf.map (homOfLE <| h₁).op
           (X.Presheaf.map (homOfLE le_sup_left).op f ^ (n + n₂) * y₁) =
@@ -377,26 +347,17 @@ theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme
     trans
       X.presheaf.map (hom_of_le <| h₃.trans <| h₁.trans le_sup_left).op f ^ (n₂ + n₁) *
         X.presheaf.map (hom_of_le <| (X.basic_open_res f _).trans_le inf_le_right).op x
-    · rw [pow_add, mul_assoc]
-      congr 1
+    · rw [pow_add, mul_assoc]; congr 1
       convert congr_arg (X.presheaf.map (hom_of_le _).op) e₁
-      · simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp]
-        congr
-      · simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp]
-        congr
-      · rw [X.basic_open_res, X.basic_open_res]
-        rintro x ⟨H₁, H₂⟩
-        exact ⟨h₁ H₁, H₂⟩
-    · rw [add_comm, pow_add, mul_assoc]
-      congr 1
+      · simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp]; congr
+      · simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp]; congr
+      · rw [X.basic_open_res, X.basic_open_res]; rintro x ⟨H₁, H₂⟩; exact ⟨h₁ H₁, H₂⟩
+    · rw [add_comm, pow_add, mul_assoc]; congr 1
       convert congr_arg (X.presheaf.map (hom_of_le _).op) e₂.symm
-      · simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp]
-        congr
-      · simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp]
-        congr
+      · simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp]; congr
+      · simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp]; congr
       · simp only [X.basic_open_res]
-        rintro x ⟨H₁, H₂⟩
-        exact ⟨h₂ H₁, H₂⟩
+        rintro x ⟨H₁, H₂⟩; exact ⟨h₂ H₁, H₂⟩
   use n
   simp only [pow_add, map_pow, map_mul, ← comp_apply, ← mul_assoc, ← functor.map_comp,
     Subtype.coe_mk] at e⊢
@@ -425,17 +386,13 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
     obtain ⟨n₁, y₁, hy₁⟩ :=
       hU (hSU.of_subset <| Set.subset_union_left _ _) (X.presheaf.map (hom_of_le le_sup_left).op f)
         (X.presheaf.map (hom_of_le _).op x)
-    swap
-    · rw [X.basic_open_res]
-      exact inf_le_right
+    swap; · rw [X.basic_open_res]; exact inf_le_right
     -- We know that such `y₂, n₂` exists on `U` since `U` is affine.
     obtain ⟨n₂, y₂, hy₂⟩ :=
       exists_eq_pow_mul_of_is_affine_open X _ U.2 (X.presheaf.map (hom_of_le le_sup_right).op f)
         (X.presheaf.map (hom_of_le _).op x)
     delta TopCat.Presheaf.restrictOpen TopCat.Presheaf.restrict at hy₂
-    swap
-    · rw [X.basic_open_res]
-      exact inf_le_right
+    swap; · rw [X.basic_open_res]; exact inf_le_right
     -- Since `S ∪ U` is quasi-separated, `S ∩ U` can be covered by finite affine opens.
     obtain ⟨s, hs', hs⟩ :=
       (is_compact_open_iff_eq_finset_affine_union _).mp
@@ -444,24 +401,13 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
           (S ⊓ U.1).2⟩
     haveI := hs'.to_subtype
     cases nonempty_fintype s
-    replace hs : S ⊓ U.1 = iSup fun i : s => (i : opens X.carrier) :=
-      by
-      ext1
-      simpa using hs
+    replace hs : S ⊓ U.1 = iSup fun i : s => (i : opens X.carrier) := by ext1; simpa using hs
     have hs₁ : ∀ i : s, i.1.1 ≤ S := by
-      intro i
-      change (i : opens X.carrier) ≤ S
-      refine' le_trans _ inf_le_left
-      use U.1
-      erw [hs]
-      exact le_iSup _ _
+      intro i; change (i : opens X.carrier) ≤ S
+      refine' le_trans _ inf_le_left; use U.1; erw [hs]; exact le_iSup _ _
     have hs₂ : ∀ i : s, i.1.1 ≤ U.1 := by
-      intro i
-      change (i : opens X.carrier) ≤ U
-      refine' le_trans _ inf_le_right
-      use S
-      erw [hs]
-      exact le_iSup _ _
+      intro i; change (i : opens X.carrier) ≤ U
+      refine' le_trans _ inf_le_right; use S; erw [hs]; exact le_iSup _ _
     -- On each affine open in the intersection, we have `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`
     -- for some `n` since `f ^ n₂ * y₁ = f ^ (n₁ + n₂) * x = f ^ n₁ * y₂` on `X_f`.
     have :
@@ -486,9 +432,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
           (X.presheaf.map (hom_of_le le_sup_right).op f ^ (finset.univ.sup n + n₁) * y₂) :=
       by
       fapply X.sheaf.eq_of_locally_eq' fun i : s => i.1.1
-      · refine' fun i => hom_of_le _
-        erw [hs]
-        exact le_iSup _ _
+      · refine' fun i => hom_of_le _; erw [hs]; exact le_iSup _ _
       · exact le_of_eq hs
       · intro i
         replace hn :=
@@ -514,10 +458,8 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
       X.sheaf.eq_of_locally_eq₂
         (hom_of_le (_ : X.basic_open (X.presheaf.map (hom_of_le le_sup_left).op f) ≤ _))
         (hom_of_le (_ : X.basic_open (X.presheaf.map (hom_of_le le_sup_right).op f) ≤ _)) _ _ _ _ _
-    · rw [X.basic_open_res]
-      exact inf_le_right
-    · rw [X.basic_open_res]
-      exact inf_le_right
+    · rw [X.basic_open_res]; exact inf_le_right
+    · rw [X.basic_open_res]; exact inf_le_right
     · rw [X.basic_open_res, X.basic_open_res]
       erw [← inf_sup_right]
       refine' le_inf_iff.mpr ⟨X.basic_open_le f, le_of_eq rfl⟩
@@ -530,12 +472,8 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
       · delta Scheme.sheaf SheafedSpace.sheaf
         simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp, mul_assoc,
           pow_add]
-        erw [hy₁]
-        congr 1
-        rw [← mul_assoc, ← mul_assoc]
-        congr 1
-        rw [mul_comm, ← comp_apply, ← functor.map_comp]
-        congr
+        erw [hy₁]; congr 1; rw [← mul_assoc, ← mul_assoc]; congr 1
+        rw [mul_comm, ← comp_apply, ← functor.map_comp]; congr
     · convert congr_arg (X.presheaf.map (hom_of_le _).op)
           (X.sheaf.obj_sup_iso_prod_eq_locus_inv_snd S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using 1
       · delta Scheme.sheaf SheafedSpace.sheaf
@@ -545,9 +483,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
       · delta Scheme.sheaf SheafedSpace.sheaf
         simp only [map_pow, map_mul, ← comp_apply, ← functor.map_comp, ← op_comp, mul_assoc,
           pow_add]
-        erw [hy₂]
-        rw [← comp_apply, ← functor.map_comp]
-        congr
+        erw [hy₂]; rw [← comp_apply, ← functor.map_comp]; congr
 #align algebraic_geometry.exists_eq_pow_mul_of_is_compact_of_is_quasi_separated AlgebraicGeometry.exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated
 
 /-- If `U` is qcqs, then `Γ(X, D(f)) ≃ Γ(X, U)_f` for every `f : Γ(X, U)`.
Diff
@@ -277,7 +277,7 @@ instance quasiSeparatedSpace_of_isAffine (X : Scheme) [IsAffine X] :
     intro i' hi'
     change IsCompact (X.basic_open i ⊓ X.basic_open i').1
     rw [← Scheme.basic_open_mul]
-    exact ((top_is_affine_open _).basicOpen_is_affine _).IsCompact
+    exact ((top_is_affine_open _).basicOpenIsAffine _).IsCompact
 #align algebraic_geometry.quasi_separated_space_of_is_affine AlgebraicGeometry.quasiSeparatedSpace_of_isAffine
 
 theorem IsAffineOpen.isQuasiSeparated {X : Scheme} {U : Opens X.carrier} (hU : IsAffineOpen U) :
Diff
@@ -213,7 +213,7 @@ theorem QuasiSeparated.openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
         ∀ U : Opens Y.carrier, QuasiSeparated (f ∣_ U),
         ∀ {U : Scheme} (g : U ⟶ Y) [IsOpenImmersion g],
           QuasiSeparated (pullback.snd : pullback f g ⟶ _),
-        ∃ (ι : Type u)(U : ι → Opens Y.carrier)(hU : supᵢ U = ⊤), ∀ i, QuasiSeparated (f ∣_ U i)] :=
+        ∃ (ι : Type u)(U : ι → Opens Y.carrier)(hU : iSup U = ⊤), ∀ i, QuasiSeparated (f ∣_ U i)] :=
   QuasiSeparated.isLocalAtTarget.openCover_tFAE f
 #align algebraic_geometry.quasi_separated.open_cover_tfae AlgebraicGeometry.QuasiSeparated.openCover_tFAE
 
@@ -269,8 +269,8 @@ instance quasiSeparatedSpace_of_isAffine (X : Scheme) [IsAffine X] :
   intro U V hU hU' hV hV'
   obtain ⟨s, hs, e⟩ := (is_compact_open_iff_eq_basic_open_union _).mp ⟨hU', hU⟩
   obtain ⟨s', hs', e'⟩ := (is_compact_open_iff_eq_basic_open_union _).mp ⟨hV', hV⟩
-  rw [e, e', Set.unionᵢ₂_inter]
-  simp_rw [Set.inter_unionᵢ₂]
+  rw [e, e', Set.iUnion₂_inter]
+  simp_rw [Set.inter_iUnion₂]
   apply hs.is_compact_bUnion
   · intro i hi
     apply hs'.is_compact_bUnion
@@ -444,7 +444,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
           (S ⊓ U.1).2⟩
     haveI := hs'.to_subtype
     cases nonempty_fintype s
-    replace hs : S ⊓ U.1 = supᵢ fun i : s => (i : opens X.carrier) :=
+    replace hs : S ⊓ U.1 = iSup fun i : s => (i : opens X.carrier) :=
       by
       ext1
       simpa using hs
@@ -454,14 +454,14 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
       refine' le_trans _ inf_le_left
       use U.1
       erw [hs]
-      exact le_supᵢ _ _
+      exact le_iSup _ _
     have hs₂ : ∀ i : s, i.1.1 ≤ U.1 := by
       intro i
       change (i : opens X.carrier) ≤ U
       refine' le_trans _ inf_le_right
       use S
       erw [hs]
-      exact le_supᵢ _ _
+      exact le_iSup _ _
     -- On each affine open in the intersection, we have `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`
     -- for some `n` since `f ^ n₂ * y₁ = f ^ (n₁ + n₂) * x = f ^ n₁ * y₂` on `X_f`.
     have :
@@ -488,7 +488,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
       fapply X.sheaf.eq_of_locally_eq' fun i : s => i.1.1
       · refine' fun i => hom_of_le _
         erw [hs]
-        exact le_supᵢ _ _
+        exact le_iSup _ _
       · exact le_of_eq hs
       · intro i
         replace hn :=
Diff
@@ -521,10 +521,8 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
     · rw [X.basic_open_res, X.basic_open_res]
       erw [← inf_sup_right]
       refine' le_inf_iff.mpr ⟨X.basic_open_le f, le_of_eq rfl⟩
-    · convert
-        congr_arg (X.presheaf.map (hom_of_le _).op)
-          (X.sheaf.obj_sup_iso_prod_eq_locus_inv_fst S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using
-        1
+    · convert congr_arg (X.presheaf.map (hom_of_le _).op)
+          (X.sheaf.obj_sup_iso_prod_eq_locus_inv_fst S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using 1
       · delta Scheme.sheaf SheafedSpace.sheaf
         simp only [← comp_apply (X.presheaf.map _) (X.presheaf.map _), ← functor.map_comp, ←
           op_comp]
@@ -538,10 +536,8 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme) (U : Ope
         congr 1
         rw [mul_comm, ← comp_apply, ← functor.map_comp]
         congr
-    · convert
-        congr_arg (X.presheaf.map (hom_of_le _).op)
-          (X.sheaf.obj_sup_iso_prod_eq_locus_inv_snd S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using
-        1
+    · convert congr_arg (X.presheaf.map (hom_of_le _).op)
+          (X.sheaf.obj_sup_iso_prod_eq_locus_inv_snd S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using 1
       · delta Scheme.sheaf SheafedSpace.sheaf
         simp only [← comp_apply (X.presheaf.map _) (X.presheaf.map _), ← functor.map_comp, ←
           op_comp]
Diff
@@ -578,8 +578,8 @@ theorem is_localization_basicOpen_of_qcqs {X : Scheme} {U : Opens X.carrier} (hU
       refine' ⟨⟨_, n, rfl⟩, _⟩
       simpa [mul_comm z] using e
     · rintro ⟨⟨_, n, rfl⟩, e : f ^ n * z = 0⟩
-      rw [← ((RingedSpace.is_unit_res_basic_open _ f).pow n).mul_right_inj, mul_zero, ← map_pow, ←
-        map_mul, e, map_zero]
+      rw [← ((RingedSpace.is_unit_res_basic_open _ f).pow n).mul_right_inj, MulZeroClass.mul_zero, ←
+        map_pow, ← map_mul, e, map_zero]
 #align algebraic_geometry.is_localization_basic_open_of_qcqs AlgebraicGeometry.is_localization_basicOpen_of_qcqs
 
 end AlgebraicGeometry

Changes in mathlib4

mathlib3
mathlib4
chore: adapt to multiple goal linter 2 (#12361)

A PR analogous to #12338: reformatting proofs following the multiple goals linter of #12339.

Diff
@@ -393,12 +393,16 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
     replace hs : S ⊓ U.1 = iSup fun i : s => (i : Opens X.carrier) := by ext1; simpa using hs
     have hs₁ : ∀ i : s, i.1.1 ≤ S := by
       intro i; change (i : Opens X.carrier) ≤ S
-      refine' le_trans _ inf_le_left; swap; exact U.1; erw [hs]
+      refine' le_trans _ inf_le_left; swap
+      · exact U.1
+      erw [hs]
       -- Porting note: have to add argument explicitly
       exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
     have hs₂ : ∀ i : s, i.1.1 ≤ U.1 := by
       intro i; change (i : Opens X.carrier) ≤ U
-      refine' le_trans _ inf_le_right; swap; exact S; erw [hs]
+      refine' le_trans _ inf_le_right; swap
+      · exact S
+      erw [hs]
       -- Porting note: have to add argument explicitly
       exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
     -- On each affine open in the intersection, we have `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`
feat(CategoryTheory): morphism properties that have the two-out-of-three property (#12460)

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>

Diff
@@ -144,12 +144,12 @@ instance (priority := 900) quasiSeparatedOfMono {X Y : Scheme} (f : X ⟶ Y) [Mo
   ⟨inferInstance⟩
 #align algebraic_geometry.quasi_separated_of_mono AlgebraicGeometry.quasiSeparatedOfMono
 
-theorem quasiSeparated_stableUnderComposition :
-    MorphismProperty.StableUnderComposition @QuasiSeparated :=
+instance quasiSeparated_isStableUnderComposition :
+    MorphismProperty.IsStableUnderComposition @QuasiSeparated :=
   quasiSeparated_eq_diagonal_is_quasiCompact.symm ▸
-    quasiCompact_stableUnderComposition.diagonal quasiCompact_respectsIso
-      quasiCompact_stableUnderBaseChange
-#align algebraic_geometry.quasi_separated_stable_under_composition AlgebraicGeometry.quasiSeparated_stableUnderComposition
+    (MorphismProperty.diagonal_isStableUnderComposition
+        quasiCompact_respectsIso quasiCompact_stableUnderBaseChange)
+#align algebraic_geometry.quasi_separated_stable_under_composition AlgebraicGeometry.quasiSeparated_isStableUnderComposition
 
 theorem quasiSeparated_stableUnderBaseChange :
     MorphismProperty.StableUnderBaseChange @QuasiSeparated :=
@@ -159,7 +159,7 @@ theorem quasiSeparated_stableUnderBaseChange :
 
 instance quasiSeparatedComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [QuasiSeparated f]
     [QuasiSeparated g] : QuasiSeparated (f ≫ g) :=
-  quasiSeparated_stableUnderComposition f g inferInstance inferInstance
+  MorphismProperty.comp_mem _ f g inferInstance inferInstance
 #align algebraic_geometry.quasi_separated_comp AlgebraicGeometry.quasiSeparatedComp
 
 theorem quasiSeparated_respectsIso : MorphismProperty.RespectsIso @QuasiSeparated :=
@@ -242,7 +242,7 @@ instance {X Y S : Scheme} (f : X ⟶ S) (g : Y ⟶ S) [QuasiSeparated f] :
 
 instance {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [QuasiSeparated f] [QuasiSeparated g] :
     QuasiSeparated (f ≫ g) :=
-  quasiSeparated_stableUnderComposition f g inferInstance inferInstance
+  MorphismProperty.comp_mem _ f g inferInstance inferInstance
 
 theorem quasiSeparatedSpace_of_quasiSeparated {X Y : Scheme} (f : X ⟶ Y)
     [hY : QuasiSeparatedSpace Y.carrier] [QuasiSeparated f] : QuasiSeparatedSpace X.carrier := by
chore: rename open_range to isOpen_range, closed_range to isClosed_range (#11438)

All these lemmas refer to the range of some function being open/range (i.e. isOpen or isClosed).

Diff
@@ -109,8 +109,8 @@ theorem quasi_compact_affineProperty_iff_quasiSeparatedSpace {X Y : Scheme} [IsA
     simp_rw [isCompact_iff_compactSpace] at H
     exact
       @Homeomorph.compactSpace _ _ _ _
-        (H ⟨⟨_, h₁.base_open.open_range⟩, rangeIsAffineOpenOfOpenImmersion _⟩
-          ⟨⟨_, h₂.base_open.open_range⟩, rangeIsAffineOpenOfOpenImmersion _⟩)
+        (H ⟨⟨_, h₁.base_open.isOpen_range⟩, rangeIsAffineOpenOfOpenImmersion _⟩
+          ⟨⟨_, h₂.base_open.isOpen_range⟩, rangeIsAffineOpenOfOpenImmersion _⟩)
         e.symm
 #align algebraic_geometry.quasi_compact_affine_property_iff_quasi_separated_space AlgebraicGeometry.quasi_compact_affineProperty_iff_quasiSeparatedSpace
 
chore: tidy various files (#10362)
Diff
@@ -310,11 +310,11 @@ theorem exists_eq_pow_mul_of_isAffineOpen (X : Scheme) (U : Opens X.carrier) (hU
 
 theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux_aux {X : TopCat}
     (F : X.Presheaf CommRingCat) {U₁ U₂ U₃ U₄ U₅ U₆ U₇ : Opens X} {n₁ n₂ : ℕ}
-  {y₁ : F.obj (op U₁)} {y₂ : F.obj (op U₂)} {f : F.obj (op <| U₁ ⊔ U₂)}
-  {x : F.obj (op U₃)} (h₄₁ : U₄ ≤ U₁) (h₄₂ : U₄ ≤ U₂) (h₅₁ : U₅ ≤ U₁) (h₅₃ : U₅ ≤ U₃)
-  (h₆₂ : U₆ ≤ U₂) (h₆₃ : U₆ ≤ U₃) (h₇₄ : U₇ ≤ U₄) (h₇₅ : U₇ ≤ U₅) (h₇₆ : U₇ ≤ U₆)
-  (e₁ : y₁ |_ U₅ = (f |_ U₁ |_ U₅) ^ n₁ * x |_ U₅)
-  (e₂ : y₂ |_ U₆ = (f |_ U₂ |_ U₆) ^ n₂ * x |_ U₆) :
+    {y₁ : F.obj (op U₁)} {y₂ : F.obj (op U₂)} {f : F.obj (op <| U₁ ⊔ U₂)}
+    {x : F.obj (op U₃)} (h₄₁ : U₄ ≤ U₁) (h₄₂ : U₄ ≤ U₂) (h₅₁ : U₅ ≤ U₁) (h₅₃ : U₅ ≤ U₃)
+    (h₆₂ : U₆ ≤ U₂) (h₆₃ : U₆ ≤ U₃) (h₇₄ : U₇ ≤ U₄) (h₇₅ : U₇ ≤ U₅) (h₇₆ : U₇ ≤ U₆)
+    (e₁ : y₁ |_ U₅ = (f |_ U₁ |_ U₅) ^ n₁ * x |_ U₅)
+    (e₂ : y₂ |_ U₆ = (f |_ U₂ |_ U₆) ^ n₂ * x |_ U₆) :
     (((f |_ U₁) ^ n₂ * y₁) |_ U₄) |_ U₇ = (((f |_ U₂) ^ n₁ * y₂) |_ U₄) |_ U₇ := by
   apply_fun (fun x : F.obj (op U₅) ↦ x |_ U₇) at e₁
   apply_fun (fun x : F.obj (op U₆) ↦ x |_ U₇) at e₂
refactor(Data/FunLike): use unbundled inheritance from FunLike (#8386)

The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike is EquivLike, since that has a custom coe_injective' field that is easier to implement. All other classes should take FunLike or EquivLike as a parameter.

Zulip thread

Important changes

Previously, morphism classes would be Type-valued and extend FunLike:

/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
  extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))

After this PR, they should be Prop-valued and take FunLike as a parameter:

/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
  [FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))

(Note that A B stay marked as outParam even though they are not purely required to be so due to the FunLike parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam is slightly faster.)

Similarly, MyEquivClass should take EquivLike as a parameter.

As a result, every mention of [MyHomClass F A B] should become [FunLike F A B] [MyHomClass F A B].

Remaining issues

Slower (failing) search

While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul is more expensive. This is due to suboptimal processing of arguments. For example:

variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)

theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y

example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _

Before this PR, applying map_mul f gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]. Since M and N are out_params, [MulHomClass F ?M ?N] is synthesized first, supplies values for ?M and ?N and then the Mul M and Mul N instances can be found.

After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]. Now [FunLike F ?M ?N] is synthesized first, supplies values for ?M and ?N and then the Mul M and Mul N instances can be found, before trying MulHomClass F M N which fails. Since the Mul hierarchy is very big, this can be slow to fail, especially when there is no such Mul instance.

A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N] because MulHomClass fails or succeeds much faster than the others.

As a consequence, the simpNF linter is much slower since by design it tries and fails to apply many map_ lemmas. The same issue occurs a few times in existing calls to simp [map_mul], where map_mul is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.

simp not firing sometimes

This affects map_smulₛₗ and related definitions. For simp lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw can find every argument to map_smulₛₗ successfully but simp can't: leanprover/lean4#3701.

Missing instances due to unification failing

Especially in the category theory library, we might sometimes have a type A which is also accessible as a synonym (Bundled A hA).1. Instance synthesis doesn't always work if we have f : A →* B but x * y : (Bundled A hA).1 or vice versa. This seems to be mostly fixed by keeping A B as outParams in MulHomClass F A B. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1 instead of using the syntax in the discrimination tree.)

Workaround for issues

The timeouts can be worked around for now by specifying which map_mul we mean, either as map_mul f for some explicit f, or as e.g. MonoidHomClass.map_mul.

map_smulₛₗ not firing as simp lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ a simp lemma instead of the generic map_smulₛₗ. Writing simp [map_smulₛₗ _] also works.

Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>

Diff
@@ -337,10 +337,12 @@ theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme
         (((f |_ U₂) ^ n₁ * y₂) |_ S.1)).mp <| by
     apply exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux_aux (e₁ := e₁) (e₂ := e₂)
     · show X.basicOpen _ ≤ _
-      simp only [TopCat.Presheaf.restrictOpen, TopCat.Presheaf.restrict, Scheme.basicOpen_res]
+      simp only [TopCat.Presheaf.restrictOpen, TopCat.Presheaf.restrict]
+      repeat rw [Scheme.basicOpen_res] -- Note: used to be part of the `simp only`
       exact inf_le_inf h₁ le_rfl
     · show X.basicOpen _ ≤ _
-      simp only [TopCat.Presheaf.restrictOpen, TopCat.Presheaf.restrict, Scheme.basicOpen_res]
+      simp only [TopCat.Presheaf.restrictOpen, TopCat.Presheaf.restrict]
+      repeat rw [Scheme.basicOpen_res] -- Note: used to be part of the `simp only`
       exact inf_le_inf h₂ le_rfl
   use n
   intros m hm
@@ -418,7 +420,8 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
       · exact le_of_eq hs
       · intro i
         delta Scheme.sheaf SheafedSpace.sheaf
-        simp only [← comp_apply, ← Functor.map_comp, ← op_comp]
+        repeat rw [← comp_apply,]
+        simp only [← Functor.map_comp, ← op_comp]
         apply hn
         exact Finset.le_sup (Finset.mem_univ _)
     use Finset.univ.sup n + n₁ + n₂
@@ -429,11 +432,15 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
       (homOfLE le_sup_left).op) (X.basicOpen_res _ (homOfLE le_sup_right).op)).mpr ⟨_, _⟩
     · delta Scheme.sheaf SheafedSpace.sheaf
       rw [add_assoc, add_comm n₁]
-      simp only [map_pow, map_mul, hy₁, pow_add, ← mul_assoc, ← comp_apply, ← Functor.map_comp,
-        ← op_comp, Category.assoc, homOfLE_comp]
+      simp only [pow_add, map_pow, map_mul]
+      rw [hy₁] -- Note: `simp` can't use this
+      repeat rw [← comp_apply] -- Note: `simp` can't use this
+      simp only [← mul_assoc, ← Functor.map_comp, ← op_comp, homOfLE_comp]
     · delta Scheme.sheaf SheafedSpace.sheaf
-      simp only [map_pow, map_mul, hy₂, pow_add, ← mul_assoc, ← comp_apply, ← Functor.map_comp,
-        ← op_comp, Category.assoc, homOfLE_comp]
+      simp only [pow_add, map_pow, map_mul]
+      rw [hy₂] -- Note: `simp` can't use this
+      repeat rw [← comp_apply] -- Note: `simp` can't use this
+      simp only [← mul_assoc, ← Functor.map_comp, ← op_comp, homOfLE_comp]
 #align algebraic_geometry.exists_eq_pow_mul_of_is_compact_of_is_quasi_separated AlgebraicGeometry.exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated
 
 /-- If `U` is qcqs, then `Γ(X, D(f)) ≃ Γ(X, U)_f` for every `f : Γ(X, U)`.
refactor: decapitalize names in @[mk_iff] (#9378)
  • @[mk_iff] class MyPred now generates myPred_iff, not MyPred_iff
  • add Lean.Name.decapitalize
  • fix indentation and a few typos in the docs/comments.

Partially addresses issue #9129

Diff
@@ -56,7 +56,7 @@ def QuasiSeparated.affineProperty : AffineTargetMorphismProperty := fun X _ _ _
 
 theorem quasiSeparatedSpace_iff_affine (X : Scheme) :
     QuasiSeparatedSpace X.carrier ↔ ∀ U V : X.affineOpens, IsCompact (U ∩ V : Set X.carrier) := by
-  rw [QuasiSeparatedSpace_iff]
+  rw [quasiSeparatedSpace_iff]
   constructor
   · intro H U V; exact H U V U.1.2 U.2.isCompact V.1.2 V.2.isCompact
   · intro H
@@ -115,7 +115,7 @@ theorem quasi_compact_affineProperty_iff_quasiSeparatedSpace {X Y : Scheme} [IsA
 #align algebraic_geometry.quasi_compact_affine_property_iff_quasi_separated_space AlgebraicGeometry.quasi_compact_affineProperty_iff_quasiSeparatedSpace
 
 theorem quasiSeparated_eq_diagonal_is_quasiCompact :
-    @QuasiSeparated = MorphismProperty.diagonal @QuasiCompact := by ext; exact QuasiSeparated_iff _
+    @QuasiSeparated = MorphismProperty.diagonal @QuasiCompact := by ext; exact quasiSeparated_iff _
 #align algebraic_geometry.quasi_separated_eq_diagonal_is_quasi_compact AlgebraicGeometry.quasiSeparated_eq_diagonal_is_quasiCompact
 
 theorem quasi_compact_affineProperty_diagonal_eq :
chore: space after (#8178)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -291,7 +291,7 @@ theorem quasiSeparatedOfComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [H : Q
   rintro ⟨i, j⟩; dsimp at i j
   -- replace H := H (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) i
   specialize H _ i
-  -- rw [←isQuasiSeparated_iff_quasiSeparatedSpace] at H
+  -- rw [← isQuasiSeparated_iff_quasiSeparatedSpace] at H
   refine @quasiSeparatedSpace_of_quasiSeparated _ _ ?_ H ?_
   · exact pullback.map _ _ _ _ (𝟙 _) _ _ (by simp) (Category.comp_id _) ≫
       (pullbackRightPullbackFstIso g (Z.affineCover.map i) f).hom
chore: replace IsLocalization.eq_iff_exists' by exists_of_eq (#8335)

The other direction is a consequence of IsLocalization.map_units.

Also do the same for LocalizationMap and IsLocalizedModule.

This means we have one less fact to prove when constructing an IsLocalization (etc.) instance (thus many proofs are golfed), but once we construct it we still have access to the eq_iff_exists lemmas (without the prime) so the API doesn't get less powerful.

Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>

Diff
@@ -453,17 +453,10 @@ theorem is_localization_basicOpen_of_qcqs {X : Scheme} {U : Opens X.carrier} (hU
     rw [← sub_eq_zero, ← map_sub, RingHom.algebraMap_toAlgebra]
     simp_rw [← @sub_eq_zero _ _ (_ * x) (_ * y), ← mul_sub]
     generalize x - y = z
-    constructor
-    · intro H
-      obtain ⟨n, e⟩ := exists_pow_mul_eq_zero_of_res_basicOpen_eq_zero_of_isCompact X hU _ _ H
-      refine' ⟨⟨_, n, rfl⟩, _⟩
-      simpa [mul_comm z] using e
-    · rintro ⟨⟨_, n, rfl⟩, e : f ^ n * z = 0⟩
-      rw [← ((RingedSpace.isUnit_res_basicOpen _ f).pow n).mul_right_inj, mul_zero, ←
-        map_pow]
-      -- Porting note: this one lemma needs `erw`
-      erw [← map_mul]
-      rw [e, map_zero]
+    intro H
+    obtain ⟨n, e⟩ := exists_pow_mul_eq_zero_of_res_basicOpen_eq_zero_of_isCompact X hU _ _ H
+    refine' ⟨⟨_, n, rfl⟩, _⟩
+    simpa [mul_comm z] using e
 #align algebraic_geometry.is_localization_basic_open_of_qcqs AlgebraicGeometry.is_localization_basicOpen_of_qcqs
 
 end AlgebraicGeometry
perf(AlgebraicGeometry): Fix slow and bad proofs (#7747)

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>

Diff
@@ -301,76 +301,56 @@ theorem quasiSeparatedOfComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [H : Q
 theorem exists_eq_pow_mul_of_isAffineOpen (X : Scheme) (U : Opens X.carrier) (hU : IsAffineOpen U)
     (f : X.presheaf.obj (op U)) (x : X.presheaf.obj (op <| X.basicOpen f)) :
     ∃ (n : ℕ) (y : X.presheaf.obj (op U)), y |_ X.basicOpen f = (f |_ X.basicOpen f) ^ n * x := by
-  have := (isLocalization_basicOpen hU f).2
+  have := (hU.isLocalization_basicOpen f).2
   obtain ⟨⟨y, _, n, rfl⟩, d⟩ := this x
   use n, y
   delta TopCat.Presheaf.restrictOpen TopCat.Presheaf.restrict
   simpa [mul_comm x] using d.symm
 #align algebraic_geometry.exists_eq_pow_mul_of_is_affine_open AlgebraicGeometry.exists_eq_pow_mul_of_isAffineOpen
 
-set_option maxHeartbeats 500000 in
+theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux_aux {X : TopCat}
+    (F : X.Presheaf CommRingCat) {U₁ U₂ U₃ U₄ U₅ U₆ U₇ : Opens X} {n₁ n₂ : ℕ}
+  {y₁ : F.obj (op U₁)} {y₂ : F.obj (op U₂)} {f : F.obj (op <| U₁ ⊔ U₂)}
+  {x : F.obj (op U₃)} (h₄₁ : U₄ ≤ U₁) (h₄₂ : U₄ ≤ U₂) (h₅₁ : U₅ ≤ U₁) (h₅₃ : U₅ ≤ U₃)
+  (h₆₂ : U₆ ≤ U₂) (h₆₃ : U₆ ≤ U₃) (h₇₄ : U₇ ≤ U₄) (h₇₅ : U₇ ≤ U₅) (h₇₆ : U₇ ≤ U₆)
+  (e₁ : y₁ |_ U₅ = (f |_ U₁ |_ U₅) ^ n₁ * x |_ U₅)
+  (e₂ : y₂ |_ U₆ = (f |_ U₂ |_ U₆) ^ n₂ * x |_ U₆) :
+    (((f |_ U₁) ^ n₂ * y₁) |_ U₄) |_ U₇ = (((f |_ U₂) ^ n₁ * y₂) |_ U₄) |_ U₇ := by
+  apply_fun (fun x : F.obj (op U₅) ↦ x |_ U₇) at e₁
+  apply_fun (fun x : F.obj (op U₆) ↦ x |_ U₇) at e₂
+  dsimp only [TopCat.Presheaf.restrictOpen, TopCat.Presheaf.restrict] at e₁ e₂ ⊢
+  simp only [map_mul, map_pow, ← comp_apply, ← op_comp, ← F.map_comp, homOfLE_comp] at e₁ e₂ ⊢
+  rw [e₁, e₂, mul_left_comm]
+
 theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme)
     (S : X.affineOpens) (U₁ U₂ : Opens X.carrier) {n₁ n₂ : ℕ} {y₁ : X.presheaf.obj (op U₁)}
     {y₂ : X.presheaf.obj (op U₂)} {f : X.presheaf.obj (op <| U₁ ⊔ U₂)}
     {x : X.presheaf.obj (op <| X.basicOpen f)} (h₁ : S.1 ≤ U₁) (h₂ : S.1 ≤ U₂)
-    (e₁ :
-      X.presheaf.map
-          (homOfLE <| X.basicOpen_le (X.presheaf.map (homOfLE le_sup_left).op f) : _ ⟶ U₁).op y₁ =
-        X.presheaf.map (homOfLE (by erw [X.basicOpen_res]; exact inf_le_left)).op
-              (X.presheaf.map (homOfLE le_sup_left).op f) ^
-            n₁ *
-          (X.presheaf.map (homOfLE (by erw [X.basicOpen_res]; exact inf_le_right)).op) x)
-    (e₂ :
-      X.presheaf.map
-          (homOfLE <| X.basicOpen_le (X.presheaf.map (homOfLE le_sup_right).op f) : _ ⟶ U₂).op y₂ =
-        X.presheaf.map (homOfLE (by rw [X.basicOpen_res]; exact inf_le_left)).op
-              (X.presheaf.map (homOfLE le_sup_right).op f) ^
-            n₂ *
-          (X.presheaf.map (homOfLE (by rw [X.basicOpen_res]; exact inf_le_right)).op) x) :
-    ∃ n : ℕ,
-      X.presheaf.map (homOfLE <| h₁).op
-          (X.presheaf.map (homOfLE le_sup_left).op f ^ (n + n₂) * y₁) =
-        X.presheaf.map (homOfLE <| h₂).op
-          (X.presheaf.map (homOfLE le_sup_right).op f ^ (n + n₁) * y₂) := by
-  -- have : IsLocalization.Away _ _ :=
-  --   isLocalization_basicOpen S.2 (X.presheaf.map (homOfLE <| le_trans h₁ le_sup_left).op f)
+    (e₁ : y₁ |_ X.basicOpen (f |_ U₁) = ((f |_ U₁ |_ X.basicOpen _) ^ n₁) * x |_ X.basicOpen _)
+    (e₂ : y₂ |_ X.basicOpen (f |_ U₂) = ((f |_ U₂ |_ X.basicOpen _) ^ n₂) * x |_ X.basicOpen _) :
+    ∃ n : ℕ, ∀ m, n ≤ m →
+      ((f |_ U₁) ^ (m + n₂) * y₁) |_ S.1 = ((f |_ U₂) ^ (m + n₁) * y₂) |_ S.1 := by
   obtain ⟨⟨_, n, rfl⟩, e⟩ :=
     (@IsLocalization.eq_iff_exists _ _ _ _ _ _
-      (isLocalization_basicOpen S.2 (X.presheaf.map (homOfLE <| le_trans h₁ le_sup_left).op f))
-        (X.presheaf.map (homOfLE <| h₁).op
-          (X.presheaf.map (homOfLE le_sup_left).op f ^ n₂ * y₁))
-        (X.presheaf.map (homOfLE <| h₂).op
-          (X.presheaf.map (homOfLE le_sup_right).op f ^ n₁ * y₂))).mp <| by
-    -- Porting note: was just a `simp`, but know as some lemmas need `erw`, just a `simp` does not
-    -- leave the goal in a desired form
-    rw [RingHom.algebraMap_toAlgebra, map_mul, map_mul, map_pow, map_pow, map_mul, map_pow, map_mul]
-    erw [map_pow]
-    rw [←comp_apply, ←comp_apply]
-    erw [←comp_apply, ←comp_apply, ←comp_apply, ←comp_apply]
-    simp only [← Functor.map_comp, ← op_comp, homOfLE_comp]
-    have h₃ : X.basicOpen ((X.presheaf.map (homOfLE (h₁.trans le_sup_left)).op) f) ≤ S.val := by
-      simpa only [X.basicOpen_res] using inf_le_left
-    trans X.presheaf.map (homOfLE <| h₃.trans <| h₁.trans le_sup_left).op f ^ (n₂ + n₁) *
-      X.presheaf.map (homOfLE <| (X.basicOpen_res f _).trans_le inf_le_right).op x
-    · rw [pow_add, mul_assoc]; congr 1
-      convert congr_arg (X.presheaf.map (homOfLE _).op) e₁ using 1
-      pick_goal 3
-      · rw [X.basicOpen_res, X.basicOpen_res]; rintro x ⟨H₁, H₂⟩; exact ⟨h₁ H₁, H₂⟩
-      · simp only [map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp]; congr 1
-      · simp only [map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp]; congr
-    · rw [add_comm, pow_add, mul_assoc]; congr 1
-      convert congr_arg (X.presheaf.map (homOfLE _).op) e₂.symm
-      · simp only [map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp]; congr
-      · simp only [map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp]; congr
-      · simp only [X.basicOpen_res]
-        rintro x ⟨H₁, H₂⟩; exact ⟨h₂ H₁, H₂⟩
+      (S.2.isLocalization_basicOpen (f |_ S.1))
+        (((f |_ U₁) ^ n₂ * y₁) |_ S.1)
+        (((f |_ U₂) ^ n₁ * y₂) |_ S.1)).mp <| by
+    apply exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux_aux (e₁ := e₁) (e₂ := e₂)
+    · show X.basicOpen _ ≤ _
+      simp only [TopCat.Presheaf.restrictOpen, TopCat.Presheaf.restrict, Scheme.basicOpen_res]
+      exact inf_le_inf h₁ le_rfl
+    · show X.basicOpen _ ≤ _
+      simp only [TopCat.Presheaf.restrictOpen, TopCat.Presheaf.restrict, Scheme.basicOpen_res]
+      exact inf_le_inf h₂ le_rfl
   use n
-  simp only [pow_add, map_pow, map_mul, ← comp_apply, ← mul_assoc, ← Functor.map_comp,
+  intros m hm
+  rw [← tsub_add_cancel_of_le hm]
+  simp only [TopCat.Presheaf.restrictOpen, TopCat.Presheaf.restrict,
+    pow_add, map_pow, map_mul, ← comp_apply, mul_assoc, ← Functor.map_comp, ← op_comp, homOfLE_comp,
     Subtype.coe_mk] at e ⊢
-  exact e
+  rw [e]
 #align algebraic_geometry.exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux AlgebraicGeometry.exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux
 
-set_option maxHeartbeats 1000000 in
 theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U : Opens X.carrier)
     (hU : IsCompact U.1) (hU' : IsQuasiSeparated U.1) (f : X.presheaf.obj (op U))
     (x : X.presheaf.obj (op <| X.basicOpen f)) :
@@ -421,17 +401,8 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
       exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
     -- On each affine open in the intersection, we have `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`
     -- for some `n` since `f ^ n₂ * y₁ = f ^ (n₁ + n₂) * x = f ^ n₁ * y₂` on `X_f`.
-    have :
-      ∀ i : s,
-        ∃ n : ℕ,
-          X.presheaf.map (homOfLE <| hs₁ i).op
-              (X.presheaf.map (homOfLE le_sup_left).op f ^ (n + n₂) * y₁) =
-            X.presheaf.map (homOfLE <| hs₂ i).op
-              (X.presheaf.map (homOfLE le_sup_right).op f ^ (n + n₁) * y₂) := by
-      intro i
-      exact
-        exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux X i.1 S U (hs₁ i) (hs₂ i) hy₁
-          hy₂
+    have := fun i ↦ exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux
+      X i.1 S U (hs₁ i) (hs₂ i) hy₁ hy₂
     choose n hn using this
     -- We can thus choose a big enough `n` such that `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`
     -- on `S ∩ U`.
@@ -446,69 +417,23 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
         exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
       · exact le_of_eq hs
       · intro i
-        replace hn :=
-          congr_arg
-            (fun x =>
-              X.presheaf.map (homOfLE (le_trans (hs₁ i) le_sup_left)).op f ^
-                  (Finset.univ.sup n - n i) *
-                x)
-            (hn i)
-        dsimp only at hn
         delta Scheme.sheaf SheafedSpace.sheaf
-        simp only [← map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp, ← mul_assoc]
-          at hn ⊢
-        erw [← map_mul, ← map_mul] at hn
-        rw [← pow_add, ← pow_add, ← add_assoc, ← add_assoc, tsub_add_cancel_of_le] at hn
-        convert hn
+        simp only [← comp_apply, ← Functor.map_comp, ← op_comp]
+        apply hn
         exact Finset.le_sup (Finset.mem_univ _)
     use Finset.univ.sup n + n₁ + n₂
     -- By the sheaf condition, since `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`, it can be glued into
     -- the desired section on `S ∪ U`.
     use (X.sheaf.objSupIsoProdEqLocus S U.1).inv ⟨⟨_ * _, _ * _⟩, this⟩
-    refine' X.sheaf.eq_of_locally_eq₂
-        (homOfLE (_ : X.basicOpen (X.presheaf.map (homOfLE le_sup_left).op f) ≤ _))
-        (homOfLE (_ : X.basicOpen (X.presheaf.map (homOfLE le_sup_right).op f) ≤ _)) _ _ _ _ _
-    · rw [X.basicOpen_res]; exact inf_le_right
-    · rw [X.basicOpen_res]; exact inf_le_right
-    · rw [X.basicOpen_res, X.basicOpen_res]
-      erw [← inf_sup_right]
-      refine' le_inf_iff.mpr ⟨X.basicOpen_le f, le_of_eq rfl⟩
-    · convert congr_arg (X.presheaf.map
-        -- Porting note: needs to be explicit here
-        (homOfLE (by restrict_tac :
-          X.basicOpen (X.presheaf.map (homOfLE (le_sup_left : S ≤ S ⊔ U.1)).op f) ≤ S)).op)
-        (X.sheaf.objSupIsoProdEqLocus_inv_fst S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using 1
-      · delta Scheme.sheaf SheafedSpace.sheaf
-        -- Porting note: was just a single `simp only [...]`
-        simp only
-        erw [← comp_apply, ← comp_apply, ← comp_apply, ← comp_apply]
-        simp only [← Functor.map_comp, ← op_comp]
-        congr 1
-      · delta Scheme.sheaf SheafedSpace.sheaf
-        -- Porting note: was just a single `simp only [...]`
-        simp only [map_pow, map_mul]
-        erw [← comp_apply, ← comp_apply]
-        simp only [← Functor.map_comp, ← op_comp, mul_assoc, pow_add]
-        erw [hy₁]; congr 1; rw [← mul_assoc, ← mul_assoc]; congr 1
-        rw [mul_comm, ← comp_apply, ← Functor.map_comp]; congr 1
-    · convert
-        congr_arg (X.presheaf.map (homOfLE _).op)
-          (X.sheaf.objSupIsoProdEqLocus_inv_snd S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using
-        1
-      pick_goal 3
-      · rw [X.basicOpen_res]; restrict_tac
-      · delta Scheme.sheaf SheafedSpace.sheaf
-        -- Porting note: was just a single `simp only [...]`
-        simp only
-        erw [← comp_apply, ← comp_apply, ← comp_apply, ← comp_apply]
-        simp only [← Functor.map_comp, ← op_comp]
-        congr 1
-      · delta Scheme.sheaf SheafedSpace.sheaf
-        -- Porting note: was just a single `simp only [...]`
-        simp only [map_pow, map_mul]
-        erw [← comp_apply, ← comp_apply]
-        simp only [← Functor.map_comp, ← op_comp, mul_assoc, pow_add]
-        erw [hy₂]; rw [← comp_apply, ← Functor.map_comp]; congr 1
+    refine' (X.sheaf.objSupIsoProdEqLocus_inv_eq_iff _ _ _ (X.basicOpen_res _
+      (homOfLE le_sup_left).op) (X.basicOpen_res _ (homOfLE le_sup_right).op)).mpr ⟨_, _⟩
+    · delta Scheme.sheaf SheafedSpace.sheaf
+      rw [add_assoc, add_comm n₁]
+      simp only [map_pow, map_mul, hy₁, pow_add, ← mul_assoc, ← comp_apply, ← Functor.map_comp,
+        ← op_comp, Category.assoc, homOfLE_comp]
+    · delta Scheme.sheaf SheafedSpace.sheaf
+      simp only [map_pow, map_mul, hy₂, pow_add, ← mul_assoc, ← comp_apply, ← Functor.map_comp,
+        ← op_comp, Category.assoc, homOfLE_comp]
 #align algebraic_geometry.exists_eq_pow_mul_of_is_compact_of_is_quasi_separated AlgebraicGeometry.exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated
 
 /-- If `U` is qcqs, then `Γ(X, D(f)) ≃ Γ(X, U)_f` for every `f : Γ(X, U)`.
feat(Mathlib/AlgebraicGeometry): Move material on restriction to new file (#7749)

Also provides new notations and fixed slow proofs

Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>

Diff
@@ -295,9 +295,7 @@ theorem quasiSeparatedOfComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [H : Q
   refine @quasiSeparatedSpace_of_quasiSeparated _ _ ?_ H ?_
   · exact pullback.map _ _ _ _ (𝟙 _) _ _ (by simp) (Category.comp_id _) ≫
       (pullbackRightPullbackFstIso g (Z.affineCover.map i) f).hom
-  · apply (config := {allowSynthFailures := true}) AlgebraicGeometry.quasiSeparatedOfMono
-    -- Porting note: this instance was automatic
-    apply mono_comp
+  · exact inferInstance
 #align algebraic_geometry.quasi_separated_of_comp AlgebraicGeometry.quasiSeparatedOfComp
 
 theorem exists_eq_pow_mul_of_isAffineOpen (X : Scheme) (U : Opens X.carrier) (hU : IsAffineOpen U)
feat: Select and insert widgets (#7260)

Builds a framework to define widgets allowing users to select some sub-expressions of the main goal to generate a tactic call. Four examples using this framework are included, generating calls to tactics conv, congrm and gcongr and generating new calc steps. Also includes a calc tactic code action to start a calc proof.

Co-authored-by: Wojciech Nawrocki <wjnawrocki@protonmail.com>

Diff
@@ -372,7 +372,7 @@ theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme
   exact e
 #align algebraic_geometry.exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux AlgebraicGeometry.exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux
 
-set_option maxHeartbeats 700000 in
+set_option maxHeartbeats 1000000 in
 theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U : Opens X.carrier)
     (hU : IsCompact U.1) (hU' : IsQuasiSeparated U.1) (f : X.presheaf.obj (op U))
     (x : X.presheaf.obj (op <| X.basicOpen f)) :
chore: update/remove heart beat bumps (#6860)

We clean up heart beat bumps after #6474.

Diff
@@ -310,7 +310,7 @@ theorem exists_eq_pow_mul_of_isAffineOpen (X : Scheme) (U : Opens X.carrier) (hU
   simpa [mul_comm x] using d.symm
 #align algebraic_geometry.exists_eq_pow_mul_of_is_affine_open AlgebraicGeometry.exists_eq_pow_mul_of_isAffineOpen
 
-set_option maxHeartbeats 700000 in
+set_option maxHeartbeats 500000 in
 theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme)
     (S : X.affineOpens) (U₁ U₂ : Opens X.carrier) {n₁ n₂ : ℕ} {y₁ : X.presheaf.obj (op U₁)}
     {y₂ : X.presheaf.obj (op U₂)} {f : X.presheaf.obj (op <| U₁ ⊔ U₂)}
@@ -372,7 +372,7 @@ theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme
   exact e
 #align algebraic_geometry.exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux AlgebraicGeometry.exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux
 
-set_option maxHeartbeats 7000000 in
+set_option maxHeartbeats 700000 in
 theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U : Opens X.carrier)
     (hU : IsCompact U.1) (hU' : IsQuasiSeparated U.1) (f : X.presheaf.obj (op U))
     (x : X.presheaf.obj (op <| X.basicOpen f)) :
chore: drop MulZeroClass. in mul_zero/zero_mul (#6682)

Search&replace MulZeroClass.mul_zero -> mul_zero, MulZeroClass.zero_mul -> zero_mul.

These were introduced by Mathport, as the full name of mul_zero is actually MulZeroClass.mul_zero (it's exported with the short name).

Diff
@@ -536,7 +536,7 @@ theorem is_localization_basicOpen_of_qcqs {X : Scheme} {U : Opens X.carrier} (hU
       refine' ⟨⟨_, n, rfl⟩, _⟩
       simpa [mul_comm z] using e
     · rintro ⟨⟨_, n, rfl⟩, e : f ^ n * z = 0⟩
-      rw [← ((RingedSpace.isUnit_res_basicOpen _ f).pow n).mul_right_inj, MulZeroClass.mul_zero, ←
+      rw [← ((RingedSpace.isUnit_res_basicOpen _ f).pow n).mul_right_inj, mul_zero, ←
         map_pow]
       -- Porting note: this one lemma needs `erw`
       erw [← map_mul]
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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.quasi_separated
-! leanprover-community/mathlib commit 1a51edf13debfcbe223fa06b1cb353b9ed9751cc
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.AlgebraicGeometry.Morphisms.QuasiCompact
 import Mathlib.Topology.QuasiSeparated
 
+#align_import algebraic_geometry.morphisms.quasi_separated from "leanprover-community/mathlib"@"1a51edf13debfcbe223fa06b1cb353b9ed9751cc"
+
 /-!
 # Quasi-separated morphisms
 
chore: Forward-port leanprover-community/mathlib#19230 (#5907)

This doesn't forward-port the removal of .{u} as this doesn't actually change the type, and just results in .{u_1} being implied instead.

Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -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.quasi_separated
-! leanprover-community/mathlib commit 13361559d66b84f80b6d5a1c4a26aa5054766725
+! leanprover-community/mathlib commit 1a51edf13debfcbe223fa06b1cb353b9ed9751cc
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -445,7 +445,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
           (X.presheaf.map (homOfLE le_sup_left).op f ^ (Finset.univ.sup n + n₂) * y₁) =
         X.presheaf.map (homOfLE <| inf_le_right).op
           (X.presheaf.map (homOfLE le_sup_right).op f ^ (Finset.univ.sup n + n₁) * y₂) := by
-      fapply TopCat.Sheaf.eq_of_locally_eq' X.sheaf fun i : s => i.1.1
+      fapply X.sheaf.eq_of_locally_eq' fun i : s => i.1.1
       · refine' fun i => homOfLE _; erw [hs];
         -- Porting note: have to add argument explicitly
         exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
@@ -470,7 +470,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
     -- By the sheaf condition, since `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`, it can be glued into
     -- the desired section on `S ∪ U`.
     use (X.sheaf.objSupIsoProdEqLocus S U.1).inv ⟨⟨_ * _, _ * _⟩, this⟩
-    refine' TopCat.Sheaf.eq_of_locally_eq₂ X.sheaf
+    refine' X.sheaf.eq_of_locally_eq₂
         (homOfLE (_ : X.basicOpen (X.presheaf.map (homOfLE le_sup_left).op f) ≤ _))
         (homOfLE (_ : X.basicOpen (X.presheaf.map (homOfLE le_sup_right).op f) ≤ _)) _ _ _ _ _
     · rw [X.basicOpen_res]; exact inf_le_right
chore: tidy various files (#5840)
Diff
@@ -18,7 +18,7 @@ A morphism of schemes `f : X ⟶ Y` is quasi-separated if the diagonal morphism
 quasi-compact.
 
 A scheme is quasi-separated if the intersections of any two affine open sets is quasi-compact.
-(`algebraic_geometry.quasi_separated_space_iff_affine`)
+(`AlgebraicGeometry.quasiSeparatedSpace_iff_affine`)
 
 We show that a morphism is quasi-separated if the preimage of every affine open is quasi-separated.
 
@@ -26,7 +26,7 @@ We also show that this property is local at the target,
 and is stable under compositions and base-changes.
 
 ## Main result
-- `is_localization_basic_open_of_qcqs` (**Qcqs lemma**):
+- `AlgebraicGeometry.is_localization_basicOpen_of_qcqs` (**Qcqs lemma**):
   If `U` is qcqs, then `Γ(X, D(f)) ≃ Γ(X, U)_f` for every `f : Γ(X, U)`.
 
 -/
@@ -44,14 +44,14 @@ namespace AlgebraicGeometry
 
 variable {X Y : Scheme.{u}} (f : X ⟶ Y)
 
-/-- A morphism is `quasi_separated` if diagonal map is quasi-compact. -/
+/-- A morphism is `QuasiSeparated` if diagonal map is quasi-compact. -/
 @[mk_iff]
 class QuasiSeparated (f : X ⟶ Y) : Prop where
-  /-- A morphism is `quasi_separated` if diagonal map is quasi-compact. -/
+  /-- A morphism is `QuasiSeparated` if diagonal map is quasi-compact. -/
   diagonalQuasiCompact : QuasiCompact (pullback.diagonal f)
 #align algebraic_geometry.quasi_separated AlgebraicGeometry.QuasiSeparated
 
-/-- The `affine_target_morphism_property` corresponding to `quasi_separated`, asserting that the
+/-- The `AffineTargetMorphismProperty` corresponding to `QuasiSeparated`, asserting that the
 domain is a quasi-separated scheme. -/
 def QuasiSeparated.affineProperty : AffineTargetMorphismProperty := fun X _ _ _ =>
   QuasiSeparatedSpace X.carrier
@@ -68,7 +68,7 @@ theorem quasiSeparatedSpace_iff_affine (X : Scheme) :
         IsCompact (U ⊓ V).1
       by intro U V hU hU' hV hV'; exact this ⟨U, hU⟩ hU' ⟨V, hV⟩ hV'
     intro U hU V hV
-    -- Porting note : it complains "unable to find motive", but telling Lean that motive is
+    -- Porting note: it complains "unable to find motive", but telling Lean that motive is
     -- underscore is actually sufficient, weird
     apply compact_open_induction_on (P := _) V hV
     · simp
@@ -96,7 +96,7 @@ theorem quasi_compact_affineProperty_iff_quasiSeparatedSpace {X Y : Scheme} [IsA
     haveI : IsAffine _ := V.2
     let g : pullback (X.ofRestrict U.1.openEmbedding) (X.ofRestrict V.1.openEmbedding) ⟶ X :=
       pullback.fst ≫ X.ofRestrict _
-    -- Porting note : `infer_instance` does not work here
+    -- Porting note: `inferInstance` does not work here
     have : IsOpenImmersion g := PresheafedSpace.IsOpenImmersion.comp _ _
     have e := Homeomorph.ofEmbedding _ this.base_open.toEmbedding
     rw [IsOpenImmersion.range_pullback_to_base_of_left] at e
@@ -105,7 +105,7 @@ theorem quasi_compact_affineProperty_iff_quasiSeparatedSpace {X Y : Scheme} [IsA
     exact @Homeomorph.compactSpace _ _ _ _ (H _ _) e
   · introv H h₁ h₂
     let g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
-    -- Porting note : `infer_instance` does not work here
+    -- Porting note: `inferInstance` does not work here
     have : IsOpenImmersion g := PresheafedSpace.IsOpenImmersion.comp _ _
     have e := Homeomorph.ofEmbedding _ this.base_open.toEmbedding
     rw [IsOpenImmersion.range_pullback_to_base_of_left] at e
@@ -196,7 +196,7 @@ theorem QuasiSeparated.is_local_at_target : PropertyIsLocalAtTarget @QuasiSepara
 #align algebraic_geometry.quasi_separated.is_local_at_target AlgebraicGeometry.QuasiSeparated.is_local_at_target
 
 open List in
-theorem QuasiSeparated.openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
+theorem QuasiSeparated.openCover_TFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
     TFAE
       [QuasiSeparated f,
         ∃ 𝒰 : Scheme.OpenCover.{u} Y,
@@ -209,7 +209,7 @@ theorem QuasiSeparated.openCover_tFAE {X Y : Scheme.{u}} (f : X ⟶ Y) :
         ∃ (ι : Type u) (U : ι → Opens Y.carrier) (_ : iSup U = ⊤),
           ∀ i, QuasiSeparated (f ∣_ U i)] :=
   QuasiSeparated.is_local_at_target.openCover_TFAE f
-#align algebraic_geometry.quasi_separated.open_cover_tfae AlgebraicGeometry.QuasiSeparated.openCover_tFAE
+#align algebraic_geometry.quasi_separated.open_cover_tfae AlgebraicGeometry.QuasiSeparated.openCover_TFAE
 
 theorem quasiSeparated_over_affine_iff {X Y : Scheme} (f : X ⟶ Y) [IsAffine Y] :
     QuasiSeparated f ↔ QuasiSeparatedSpace X.carrier := by
@@ -252,7 +252,7 @@ theorem quasiSeparatedSpace_of_quasiSeparated {X Y : Scheme} (f : X ⟶ Y)
   rw [quasiSeparatedSpace_iff_quasiSeparated] at hY ⊢
   have : f ≫ terminal.from Y = terminal.from X := terminalIsTerminal.hom_ext _ _
   rw [← this]
-  skip; infer_instance
+  infer_instance
 #align algebraic_geometry.quasi_separated_space_of_quasi_separated AlgebraicGeometry.quasiSeparatedSpace_of_quasiSeparated
 
 instance quasiSeparatedSpace_of_isAffine (X : Scheme) [IsAffine X] :
@@ -280,11 +280,11 @@ theorem IsAffineOpen.isQuasiSeparated {X : Scheme} {U : Opens X.carrier} (hU : I
 
 theorem quasiSeparatedOfComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [H : QuasiSeparated (f ≫ g)] :
     QuasiSeparated f := by
-  -- Porting note : rewrite `(QuasiSeparated.affine_openCover_TFAE f).out 0 1` directly fails, but
+  -- Porting note: rewrite `(QuasiSeparated.affine_openCover_TFAE f).out 0 1` directly fails, but
   -- give it a name works
   have h01 := (QuasiSeparated.affine_openCover_TFAE f).out 0 1
   rw [h01]; clear h01
-  -- Porting note : rewrite `(QuasiSeparated.affine_openCover_TFAE ...).out 0 2` directly fails, but
+  -- Porting note: rewrite `(QuasiSeparated.affine_openCover_TFAE ...).out 0 2` directly fails, but
   -- give it a name works
   have h02 := (QuasiSeparated.affine_openCover_TFAE (f ≫ g)).out 0 2
   rw [h02] at H; clear h02
@@ -299,7 +299,7 @@ theorem quasiSeparatedOfComp {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [H : Q
   · exact pullback.map _ _ _ _ (𝟙 _) _ _ (by simp) (Category.comp_id _) ≫
       (pullbackRightPullbackFstIso g (Z.affineCover.map i) f).hom
   · apply (config := {allowSynthFailures := true}) AlgebraicGeometry.quasiSeparatedOfMono
-    -- Porting note : this instance was automatic
+    -- Porting note: this instance was automatic
     apply mono_comp
 #align algebraic_geometry.quasi_separated_of_comp AlgebraicGeometry.quasiSeparatedOfComp
 
@@ -346,7 +346,7 @@ theorem exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux (X : Scheme
           (X.presheaf.map (homOfLE le_sup_left).op f ^ n₂ * y₁))
         (X.presheaf.map (homOfLE <| h₂).op
           (X.presheaf.map (homOfLE le_sup_right).op f ^ n₁ * y₂))).mp <| by
-    -- Porting note : was just a `simp`, but know as some lemmas need `erw`, just a `simp` does not
+    -- Porting note: was just a `simp`, but know as some lemmas need `erw`, just a `simp` does not
     -- leave the goal in a desired form
     rw [RingHom.algebraMap_toAlgebra, map_mul, map_mul, map_pow, map_pow, map_mul, map_pow, map_mul]
     erw [map_pow]
@@ -382,7 +382,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
     ∃ (n : ℕ) (y : X.presheaf.obj (op U)), y |_ X.basicOpen f = (f |_ X.basicOpen f) ^ n * x := by
   delta TopCat.Presheaf.restrictOpen TopCat.Presheaf.restrict
   revert hU' f x
-  -- Porting note : complains `expected type is not available`, but tell Lean that it is underscore
+  -- Porting note: complains `expected type is not available`, but tell Lean that it is underscore
   -- is sufficient
   apply compact_open_induction_on (P := _) U hU
   · intro _ f x
@@ -417,12 +417,12 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
     have hs₁ : ∀ i : s, i.1.1 ≤ S := by
       intro i; change (i : Opens X.carrier) ≤ S
       refine' le_trans _ inf_le_left; swap; exact U.1; erw [hs]
-      -- Porting note : have to add argument explicitly
+      -- Porting note: have to add argument explicitly
       exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
     have hs₂ : ∀ i : s, i.1.1 ≤ U.1 := by
       intro i; change (i : Opens X.carrier) ≤ U
       refine' le_trans _ inf_le_right; swap; exact S; erw [hs]
-      -- Porting note : have to add argument explicitly
+      -- Porting note: have to add argument explicitly
       exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
     -- On each affine open in the intersection, we have `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`
     -- for some `n` since `f ^ n₂ * y₁ = f ^ (n₁ + n₂) * x = f ^ n₁ * y₂` on `X_f`.
@@ -447,7 +447,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
           (X.presheaf.map (homOfLE le_sup_right).op f ^ (Finset.univ.sup n + n₁) * y₂) := by
       fapply TopCat.Sheaf.eq_of_locally_eq' X.sheaf fun i : s => i.1.1
       · refine' fun i => homOfLE _; erw [hs];
-        -- Porting note : have to add argument explicitly
+        -- Porting note: have to add argument explicitly
         exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
       · exact le_of_eq hs
       · intro i
@@ -479,18 +479,18 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
       erw [← inf_sup_right]
       refine' le_inf_iff.mpr ⟨X.basicOpen_le f, le_of_eq rfl⟩
     · convert congr_arg (X.presheaf.map
-        -- Porting note : needs to be explicit here
+        -- Porting note: needs to be explicit here
         (homOfLE (by restrict_tac :
           X.basicOpen (X.presheaf.map (homOfLE (le_sup_left : S ≤ S ⊔ U.1)).op f) ≤ S)).op)
         (X.sheaf.objSupIsoProdEqLocus_inv_fst S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using 1
       · delta Scheme.sheaf SheafedSpace.sheaf
-        -- Porting note : was just a single `simp only [...]`
+        -- Porting note: was just a single `simp only [...]`
         simp only
         erw [← comp_apply, ← comp_apply, ← comp_apply, ← comp_apply]
         simp only [← Functor.map_comp, ← op_comp]
         congr 1
       · delta Scheme.sheaf SheafedSpace.sheaf
-        -- Porting note : was just a single `simp only [...]`
+        -- Porting note: was just a single `simp only [...]`
         simp only [map_pow, map_mul]
         erw [← comp_apply, ← comp_apply]
         simp only [← Functor.map_comp, ← op_comp, mul_assoc, pow_add]
@@ -503,13 +503,13 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
       pick_goal 3
       · rw [X.basicOpen_res]; restrict_tac
       · delta Scheme.sheaf SheafedSpace.sheaf
-        -- Porting note : was just a single `simp only [...]`
+        -- Porting note: was just a single `simp only [...]`
         simp only
         erw [← comp_apply, ← comp_apply, ← comp_apply, ← comp_apply]
         simp only [← Functor.map_comp, ← op_comp]
         congr 1
       · delta Scheme.sheaf SheafedSpace.sheaf
-        -- Porting note : was just a single `simp only [...]`
+        -- Porting note: was just a single `simp only [...]`
         simp only [map_pow, map_mul]
         erw [← comp_apply, ← comp_apply]
         simp only [← Functor.map_comp, ← op_comp, mul_assoc, pow_add]
@@ -541,7 +541,7 @@ theorem is_localization_basicOpen_of_qcqs {X : Scheme} {U : Opens X.carrier} (hU
     · rintro ⟨⟨_, n, rfl⟩, e : f ^ n * z = 0⟩
       rw [← ((RingedSpace.isUnit_res_basicOpen _ f).pow n).mul_right_inj, MulZeroClass.mul_zero, ←
         map_pow]
-      -- Porting note : this one lemma needs `erw`
+      -- Porting note: this one lemma needs `erw`
       erw [← map_mul]
       rw [e, map_zero]
 #align algebraic_geometry.is_localization_basic_open_of_qcqs AlgebraicGeometry.is_localization_basicOpen_of_qcqs
feat: using UnivLE to generalize universes in UniqueGluing (#5726)

This is a test of the UnivLE proposal. The UniqueGluing file was one place where we couldn't forward port the universe generalisations made in mathlib3 in https://github.com/leanprover-community/mathlib/pull/19153.

Diff relative to #5724 is https://github.com/leanprover-community/mathlib4/compare/UnivLE_types...UnivLE_UniqueGluing.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Johan Commelin <johan@commelin.net> Co-authored-by: Matthew Robert Ballard <matt@mrb.email> Co-authored-by: Bulhwi Cha <chabulhwi@semmalgil.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Pol'tta / Miyahara Kō <pol_tta@outlook.jp> Co-authored-by: Oliver Nash <github@olivernash.org> Co-authored-by: Anatole Dedecker <anatolededecker@gmail.com> Co-authored-by: Tobias Grosser <tobias@grosser.es> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Moritz Firsching <moritz.firsching@gmail.com> Co-authored-by: Jireh Loreaux <loreaujy@gmail.com> Co-authored-by: Christopher Hoskin <christopher.hoskin@gmail.com>

Diff
@@ -445,7 +445,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
           (X.presheaf.map (homOfLE le_sup_left).op f ^ (Finset.univ.sup n + n₂) * y₁) =
         X.presheaf.map (homOfLE <| inf_le_right).op
           (X.presheaf.map (homOfLE le_sup_right).op f ^ (Finset.univ.sup n + n₁) * y₂) := by
-      fapply TopCat.Sheaf.eq_of_locally_eq'.{u + 1, u} X.sheaf fun i : s => i.1.1
+      fapply TopCat.Sheaf.eq_of_locally_eq' X.sheaf fun i : s => i.1.1
       · refine' fun i => homOfLE _; erw [hs];
         -- Porting note : have to add argument explicitly
         exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
@@ -470,7 +470,7 @@ theorem exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated (X : Scheme.{u}) (U :
     -- By the sheaf condition, since `f ^ (n + n₂) * y₁ = f ^ (n + n₁) * y₂`, it can be glued into
     -- the desired section on `S ∪ U`.
     use (X.sheaf.objSupIsoProdEqLocus S U.1).inv ⟨⟨_ * _, _ * _⟩, this⟩
-    refine' TopCat.Sheaf.eq_of_locally_eq₂.{u + 1, u} X.sheaf
+    refine' TopCat.Sheaf.eq_of_locally_eq₂ X.sheaf
         (homOfLE (_ : X.basicOpen (X.presheaf.map (homOfLE le_sup_left).op f) ≤ _))
         (homOfLE (_ : X.basicOpen (X.presheaf.map (homOfLE le_sup_right).op f) ≤ _)) _ _ _ _ _
     · rw [X.basicOpen_res]; exact inf_le_right
feat: port AlgebraicGeometry.Morphisms.QuasiSeparated (#5691)

Dependencies 11 + 939

940 files ported (98.8%)
388450 lines ported (98.6%)
Show graph

The unported dependencies are