File: Mathlib/AlgebraicGeometry/Morphisms/RingHomProperties.lean

full_name: RingHom.StableUnderBaseChange.pullback_fst_app_top
code: theorem StableUnderBaseChange.pullback_fst_app_top
    (hP : StableUnderBaseChange P) (hP' : RespectsIso P)
    {X Y S : Scheme} [IsAffine X] [IsAffine Y] [IsAffine S] (f : X ⟶ S) (g : Y ⟶ S)
    (H : P (g.app ⊤)) : P ((pullback.fst f g).app ⊤) 
goal: P (AlgebraicGeometry.Scheme.Hom.app (CategoryTheory.Limits.pullback.fst f g) ⊤)

full_name: AlgebraicGeometry.sourceAffineLocally
code: /-- For `P` a property of ring homomorphisms, `sourceAffineLocally P` holds for `f : X ⟶ Y`
whenever `P` holds for the restriction of `f` on every affine open subset of `X`. -/
def sourceAffineLocally : AffineTargetMorphismProperty 
goal: AlgebraicGeometry.AffineTargetMorphismProperty

full_name: AlgebraicGeometry.affineLocally
code: /-- For `P` a property of ring homomorphisms, `affineLocally P` holds for `f : X ⟶ Y` if for each
affine open `U = Spec A ⊆ Y` and `V = Spec B ⊆ f ⁻¹' U`, the ring hom `A ⟶ B` satisfies `P`.
Also see `affineLocally_iff_affineOpens_le`. -/
abbrev affineLocally : MorphismProperty Scheme.{u} 
goal: CategoryTheory.MorphismProperty AlgebraicGeometry.Scheme

full_name: AlgebraicGeometry.sourceAffineLocally_respectsIso
code: theorem sourceAffineLocally_respectsIso (h₁ : RingHom.RespectsIso P) :
    (sourceAffineLocally P).toProperty.RespectsIso 
goal: (AlgebraicGeometry.sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => P).toProperty.RespectsIso

full_name: AlgebraicGeometry.affineLocally_respectsIso
code: theorem affineLocally_respectsIso (h : RingHom.RespectsIso P) : (affineLocally P).RespectsIso 
goal: (AlgebraicGeometry.affineLocally fun {R S} [CommRing R] [CommRing S] => P).RespectsIso

full_name: AlgebraicGeometry.sourceAffineLocally_morphismRestrict
code: theorem sourceAffineLocally_morphismRestrict {X Y : Scheme.{u}} (f : X ⟶ Y)
    (U : Y.Opens) (hU : IsAffineOpen U) :
    @sourceAffineLocally P _ _ (f ∣_ U) hU ↔
      ∀ (V : X.affineOpens) (e : V.1 ≤ f ⁻¹ᵁ U), P (f.appLE U V e) 
goal: AlgebraicGeometry.sourceAffineLocally (fun {R S} [CommRing R] [CommRing S] => P) (f ∣_ U) ↔
  ∀ (V : ↑X.affineOpens) (e : ↑V ≤ f ⁻¹ᵁ U), P (AlgebraicGeometry.Scheme.Hom.appLE f U (↑V) e)

full_name: AlgebraicGeometry.affineLocally_iff_affineOpens_le
code: theorem affineLocally_iff_affineOpens_le {X Y : Scheme.{u}} (f : X ⟶ Y) :
    affineLocally.{u} P f ↔
      ∀ (U : Y.affineOpens) (V : X.affineOpens) (e : V.1 ≤ f ⁻¹ᵁ U.1), P (f.appLE U V e) 
goal: AlgebraicGeometry.affineLocally (fun {R S} [CommRing R] [CommRing S] => P) f ↔
  ∀ (U : ↑Y.affineOpens) (V : ↑X.affineOpens) (e : ↑V ≤ f ⁻¹ᵁ ↑U), P (AlgebraicGeometry.Scheme.Hom.appLE f (↑U) (↑V) e)

full_name: AlgebraicGeometry.sourceAffineLocally_isLocal
code: theorem sourceAffineLocally_isLocal (h₁ : RingHom.RespectsIso P)
    (h₂ : RingHom.LocalizationPreserves P) (h₃ : RingHom.OfLocalizationSpan P) :
    (sourceAffineLocally P).IsLocal 
goal: (AlgebraicGeometry.sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => P).IsLocal

full_name: AlgebraicGeometry.HasRingHomProperty
code: /--
`HasRingHomProperty P Q` is a type class asserting that `P` is local at the target and the source,
and for `f : Spec B ⟶ Spec A`, it is equivalent to the ring hom property `Q`.
To make the proofs easier, we state it instead as
1. `Q` is local (See `RingHom.PropertyIsLocal`)
2. `P f` if and only if `Q` holds for every `Γ(Y, U) ⟶ Γ(X, V)` for all affine `U`, `V`.
See `HasRingHomProperty.iff_appLE`.
-/
class HasRingHomProperty (P : MorphismProperty Scheme.{u})
    (Q : outParam (∀ {R S : Type u} [CommRing R] [CommRing S], (R →+* S) → Prop)) : Prop where
  isLocal_ringHomProperty : RingHom.PropertyIsLocal Q
  eq_affineLocally' : P = affineLocally Q
goal: Prop

full_name: AlgebraicGeometry.HasRingHomProperty.eq_affineLocally'
code: /--
`HasRingHomProperty P Q` is a type class asserting that `P` is local at the target and the source,
and for `f : Spec B ⟶ Spec A`, it is equivalent to the ring hom property `Q`.
To make the proofs easier, we state it instead as
1. `Q` is local (See `RingHom.PropertyIsLocal`)
2. `P f` if and only if `Q` holds for every `Γ(Y, U) ⟶ Γ(X, V)` for all affine `U`, `V`.
See `HasRingHomProperty.iff_appLE`.
-/
class HasRingHomProperty (P : MorphismProperty Scheme.{u})
    (Q : outParam (∀ {R S : Type u} [CommRing R] [CommRing S], (R →+* S) → Prop)) : Prop where
  isLocal_ringHomProperty : RingHom.PropertyIsLocal Q
  eq_affineLocally' : P = affineLocally Q
goal: P = AlgebraicGeometry.affineLocally fun {R S} [CommRing R] [CommRing S] => Q

full_name: AlgebraicGeometry.HasRingHomProperty.isLocal_ringHomProperty
code: /--
`HasRingHomProperty P Q` is a type class asserting that `P` is local at the target and the source,
and for `f : Spec B ⟶ Spec A`, it is equivalent to the ring hom property `Q`.
To make the proofs easier, we state it instead as
1. `Q` is local (See `RingHom.PropertyIsLocal`)
2. `P f` if and only if `Q` holds for every `Γ(Y, U) ⟶ Γ(X, V)` for all affine `U`, `V`.
See `HasRingHomProperty.iff_appLE`.
-/
class HasRingHomProperty (P : MorphismProperty Scheme.{u})
    (Q : outParam (∀ {R S : Type u} [CommRing R] [CommRing S], (R →+* S) → Prop)) : Prop where
  isLocal_ringHomProperty : RingHom.PropertyIsLocal Q
  eq_affineLocally' : P = affineLocally Q
goal: RingHom.PropertyIsLocal fun {R S} [CommRing R] [CommRing S] => Q

full_name: AlgebraicGeometry.HasRingHomProperty.eq_affineLocally
code: lemma eq_affineLocally : P = affineLocally Q 
goal: P = AlgebraicGeometry.affineLocally fun {R S} [CommRing R] [CommRing S] => Q

full_name: AlgebraicGeometry.HasRingHomProperty.HasAffineProperty
code: @[local instance]
lemma HasAffineProperty : HasAffineProperty P (sourceAffineLocally Q) 
goal: AlgebraicGeometry.HasAffineProperty P (AlgebraicGeometry.sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q)

full_name: AlgebraicGeometry.HasRingHomProperty.appLE
code: theorem appLE (H : P f) (U : Y.affineOpens) (V : X.affineOpens) (e) : Q (f.appLE U V e) 
goal: Q (AlgebraicGeometry.Scheme.Hom.appLE f (↑U) (↑V) e)

full_name: AlgebraicGeometry.HasRingHomProperty.app_top
code: theorem app_top (H : P f) [IsAffine X] [IsAffine Y] : Q (f.app ⊤) 
goal: Q (AlgebraicGeometry.Scheme.Hom.app f ⊤)

full_name: AlgebraicGeometry.HasRingHomProperty.comp_of_isOpenImmersion
code: theorem comp_of_isOpenImmersion [IsOpenImmersion f] (H : P g) :
    P (f ≫ g) 
goal: P (f ≫ g)

full_name: AlgebraicGeometry.HasRingHomProperty.iff_appLE
code: lemma iff_appLE : P f ↔ ∀ (U : Y.affineOpens) (V : X.affineOpens) (e), Q (f.appLE U V e) 
goal: P f ↔
  ∀ (U : ↑Y.affineOpens) (V : ↑X.affineOpens) (e : ↑V ≤ f ⁻¹ᵁ ↑U), Q (AlgebraicGeometry.Scheme.Hom.appLE f (↑U) (↑V) e)

full_name: AlgebraicGeometry.HasRingHomProperty.of_source_openCover
code: theorem of_source_openCover [IsAffine Y]
    (𝒰 : X.OpenCover) [∀ i, IsAffine (𝒰.obj i)] (H : ∀ i, Q ((𝒰.map i ≫ f).app ⊤)) :
    P f 
goal: P f

full_name: AlgebraicGeometry.HasRingHomProperty.iff_of_source_openCover
code: theorem iff_of_source_openCover [IsAffine Y] (𝒰 : X.OpenCover) [∀ i, IsAffine (𝒰.obj i)] :
    P f ↔ ∀ i, Q ((𝒰.map i ≫ f).app ⊤) 
goal: P f ↔ ∀ (i : 𝒰.J), Q (AlgebraicGeometry.Scheme.Hom.app (𝒰.map i ≫ f) ⊤)

full_name: AlgebraicGeometry.HasRingHomProperty.iff_of_isAffine
code: theorem iff_of_isAffine [IsAffine X] [IsAffine Y] :
    P f ↔ Q (f.app ⊤) 
goal: P f ↔ Q (AlgebraicGeometry.Scheme.Hom.app f ⊤)

full_name: AlgebraicGeometry.HasRingHomProperty.Spec_iff
code: theorem Spec_iff {R S : CommRingCat.{u}} {φ : R ⟶ S} :
    P (Spec.map φ) ↔ Q φ 
goal: P (AlgebraicGeometry.Spec.map φ) ↔ Q φ

full_name: AlgebraicGeometry.HasRingHomProperty.of_iSup_eq_top
code: theorem of_iSup_eq_top [IsAffine Y] {ι : Type*}
    (U : ι → X.affineOpens) (hU : ⨆ i, (U i : Opens X) = ⊤)
    (H : ∀ i, Q (f.appLE ⊤ (U i).1 le_top)) :
    P f 
goal: P f

full_name: AlgebraicGeometry.HasRingHomProperty.iff_of_iSup_eq_top
code: theorem iff_of_iSup_eq_top [IsAffine Y] {ι : Type*}
    (U : ι → X.affineOpens) (hU : ⨆ i, (U i : Opens X) = ⊤) :
    P f ↔ ∀ i, Q (f.appLE ⊤ (U i).1 le_top) 
goal: P f ↔ ∀ (i : ι), Q (AlgebraicGeometry.Scheme.Hom.appLE f ⊤ ↑(U i) ⋯)

full_name: AlgebraicGeometry.HasRingHomProperty.instIsLocalAtSource
code: instance : IsLocalAtSource P 
goal: AlgebraicGeometry.IsLocalAtSource P

full_name: AlgebraicGeometry.HasRingHomProperty.instContainsIdentitiesScheme
code: instance : P.ContainsIdentities 
goal: P.ContainsIdentities

full_name: AlgebraicGeometry.HasRingHomProperty.instIsStableUnderCompositionScheme
code: instance : P.IsStableUnderComposition 
goal: P.IsStableUnderComposition

full_name: AlgebraicGeometry.HasRingHomProperty.of_comp
code: theorem of_comp
    (H : ∀ {R S T : Type u} [CommRing R] [CommRing S] [CommRing T],
      ∀ (f : R →+* S) (g : S →+* T), Q (g.comp f) → Q g)
    {X Y Z : Scheme.{u}} {f : X ⟶ Y} {g : Y ⟶ Z} (h : P (f ≫ g)) : P f 
goal: P f

full_name: AlgebraicGeometry.HasRingHomProperty.instIsMultiplicativeScheme
code: instance : P.IsMultiplicative 
goal: P.IsMultiplicative

full_name: AlgebraicGeometry.HasRingHomProperty.of_isOpenImmersion
code: lemma of_isOpenImmersion [IsOpenImmersion f] : P f 
goal: P f

full_name: AlgebraicGeometry.HasRingHomProperty.stableUnderBaseChange
code: lemma stableUnderBaseChange (hP : RingHom.StableUnderBaseChange Q) : P.StableUnderBaseChange 
goal: P.StableUnderBaseChange