File: Mathlib/AlgebraicGeometry/Morphisms/Basic.lean

full_name: AlgebraicGeometry.IsLocalAtTarget
code: /--
We say that `P : MorphismProperty Scheme` is local at the target if
1. `P` respects isomorphisms.
2. `P` holds for `f ∣_ U` for an open cover `U` of `Y` if and only if `P` holds for `f`.
Also see `IsLocalAtTarget.mk'` for a convenient constructor.
-/
class IsLocalAtTarget (P : MorphismProperty Scheme) : Prop where
  /-- `P` respects isomorphisms. -/
  respectsIso : P.RespectsIso := by infer_instance
  /-- `P` holds for `f ∣_ U` for an open cover `U` of `Y` if and only if `P` holds for `f`.  -/
  iff_of_openCover' :
    ∀ {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.OpenCover.{u} Y),
      P f ↔ ∀ i, P (𝒰.pullbackHom f i)
goal: Prop

full_name: AlgebraicGeometry.IsLocalAtTarget.iff_of_openCover'
code: /--
We say that `P : MorphismProperty Scheme` is local at the target if
1. `P` respects isomorphisms.
2. `P` holds for `f ∣_ U` for an open cover `U` of `Y` if and only if `P` holds for `f`.
Also see `IsLocalAtTarget.mk'` for a convenient constructor.
-/
class IsLocalAtTarget (P : MorphismProperty Scheme) : Prop where
  /-- `P` respects isomorphisms. -/
  respectsIso : P.RespectsIso := by infer_instance
  /-- `P` holds for `f ∣_ U` for an open cover `U` of `Y` if and only if `P` holds for `f`.  -/
  iff_of_openCover' :
    ∀ {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.OpenCover.{u} Y),
      P f ↔ ∀ i, P (𝒰.pullbackHom f i)
goal: P f ↔ ∀ (i : (𝒰.pullbackCover f).J), P (𝒰.pullbackHom f i)

full_name: AlgebraicGeometry.IsLocalAtTarget.respectsIso
code: /--
We say that `P : MorphismProperty Scheme` is local at the target if
1. `P` respects isomorphisms.
2. `P` holds for `f ∣_ U` for an open cover `U` of `Y` if and only if `P` holds for `f`.
Also see `IsLocalAtTarget.mk'` for a convenient constructor.
-/
class IsLocalAtTarget (P : MorphismProperty Scheme) : Prop where
  /-- `P` respects isomorphisms. -/
  respectsIso : P.RespectsIso := by infer_instance
  /-- `P` holds for `f ∣_ U` for an open cover `U` of `Y` if and only if `P` holds for `f`.  -/
  iff_of_openCover' :
    ∀ {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.OpenCover.{u} Y),
      P f ↔ ∀ i, P (𝒰.pullbackHom f i)
goal: P.RespectsIso

full_name: AlgebraicGeometry.IsLocalAtTarget.mk'
code: /--
`P` is local at the target if
1. `P` respects isomorphisms.
2. If `P` holds for `f : X ⟶ Y`, then `P` holds for `f ∣_ U` for any `U`.
3. If `P` holds for `f ∣_ U` for an open cover `U` of `Y`, then `P` holds for `f`.
-/
protected lemma mk' {P : MorphismProperty Scheme} [P.RespectsIso]
    (restrict : ∀ {X Y : Scheme} (f : X ⟶ Y) (U : Y.Opens), P f → P (f ∣_ U))
    (of_sSup_eq_top :
      ∀ {X Y : Scheme.{u}} (f : X ⟶ Y) {ι : Type u} (U : ι → Y.Opens), iSup U = ⊤ →
        (∀ i, P (f ∣_ U i)) → P f) :
    IsLocalAtTarget P 
goal: AlgebraicGeometry.IsLocalAtTarget P

full_name: AlgebraicGeometry.IsLocalAtTarget.inf
code: /-- The intersection of two morphism properties that are local at the target is again local at
the target. -/
instance inf (P Q : MorphismProperty Scheme) [IsLocalAtTarget P] [IsLocalAtTarget Q] :
    IsLocalAtTarget (P ⊓ Q) 
goal: AlgebraicGeometry.IsLocalAtTarget (P ⊓ Q)

full_name: AlgebraicGeometry.IsLocalAtTarget.of_isPullback
code: lemma of_isPullback {UX UY : Scheme.{u}} {iY : UY ⟶ Y} [IsOpenImmersion iY]
    {iX : UX ⟶ X} {f' : UX ⟶ UY} (h : IsPullback iX f' f iY) (H : P f) : P f' 
goal: P f'

full_name: AlgebraicGeometry.IsLocalAtTarget.restrict
code: theorem restrict (hf : P f) (U : Y.Opens) : P (f ∣_ U) 
goal: P (f ∣_ U)

full_name: AlgebraicGeometry.IsLocalAtTarget.of_iSup_eq_top
code: lemma of_iSup_eq_top {ι} (U : ι → Y.Opens) (hU : iSup U = ⊤)
    (H : ∀ i, P (f ∣_ U i)) : P f 
goal: P f

full_name: AlgebraicGeometry.IsLocalAtTarget.iff_of_iSup_eq_top
code: theorem iff_of_iSup_eq_top {ι} (U : ι → Y.Opens) (hU : iSup U = ⊤) :
    P f ↔ ∀ i, P (f ∣_ U i) 
goal: P f ↔ ∀ (i : ι), P (f ∣_ U i)

full_name: AlgebraicGeometry.IsLocalAtTarget.of_openCover
code: lemma of_openCover (H : ∀ i, P (𝒰.pullbackHom f i)) : P f 
goal: P f

full_name: AlgebraicGeometry.IsLocalAtTarget.iff_of_openCover
code: theorem iff_of_openCover (𝒰 : Y.OpenCover) :
    P f ↔ ∀ i, P (𝒰.pullbackHom f i) 
goal: P f ↔ ∀ (i : (𝒰.pullbackCover f).J), P (𝒰.pullbackHom f i)

full_name: AlgebraicGeometry.IsLocalAtSource.iff_of_openCover'
code: /--
We say that `P : MorphismProperty Scheme` is local at the source if
1. `P` respects isomorphisms.
2. `P` holds for `𝒰.map i ≫ f` for an open cover `𝒰` of `X` iff `P` holds for `f : X ⟶ Y`.
Also see `IsLocalAtSource.mk'` for a convenient constructor.
-/
class IsLocalAtSource (P : MorphismProperty Scheme) : Prop where
  /-- `P` respects isomorphisms. -/
  respectsIso : P.RespectsIso := by infer_instance
  /-- `P` holds for `f ∣_ U` for an open cover `U` of `Y` if and only if `P` holds for `f`.  -/
  iff_of_openCover' :
    ∀ {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.OpenCover.{u} X),
      P f ↔ ∀ i, P (𝒰.map i ≫ f)
goal: P f ↔ ∀ (i : 𝒰.J), P (𝒰.map i ≫ f)

full_name: AlgebraicGeometry.IsLocalAtSource
code: /--
We say that `P : MorphismProperty Scheme` is local at the source if
1. `P` respects isomorphisms.
2. `P` holds for `𝒰.map i ≫ f` for an open cover `𝒰` of `X` iff `P` holds for `f : X ⟶ Y`.
Also see `IsLocalAtSource.mk'` for a convenient constructor.
-/
class IsLocalAtSource (P : MorphismProperty Scheme) : Prop where
  /-- `P` respects isomorphisms. -/
  respectsIso : P.RespectsIso := by infer_instance
  /-- `P` holds for `f ∣_ U` for an open cover `U` of `Y` if and only if `P` holds for `f`.  -/
  iff_of_openCover' :
    ∀ {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.OpenCover.{u} X),
      P f ↔ ∀ i, P (𝒰.map i ≫ f)
goal: Prop

full_name: AlgebraicGeometry.IsLocalAtSource.respectsIso
code: /--
We say that `P : MorphismProperty Scheme` is local at the source if
1. `P` respects isomorphisms.
2. `P` holds for `𝒰.map i ≫ f` for an open cover `𝒰` of `X` iff `P` holds for `f : X ⟶ Y`.
Also see `IsLocalAtSource.mk'` for a convenient constructor.
-/
class IsLocalAtSource (P : MorphismProperty Scheme) : Prop where
  /-- `P` respects isomorphisms. -/
  respectsIso : P.RespectsIso := by infer_instance
  /-- `P` holds for `f ∣_ U` for an open cover `U` of `Y` if and only if `P` holds for `f`.  -/
  iff_of_openCover' :
    ∀ {X Y : Scheme.{u}} (f : X ⟶ Y) (𝒰 : Scheme.OpenCover.{u} X),
      P f ↔ ∀ i, P (𝒰.map i ≫ f)
goal: P.RespectsIso

full_name: AlgebraicGeometry.IsLocalAtSource.mk'
code: /--
`P` is local at the target if
1. `P` respects isomorphisms.
2. If `P` holds for `f : X ⟶ Y`, then `P` holds for `f ∣_ U` for any `U`.
3. If `P` holds for `f ∣_ U` for an open cover `U` of `Y`, then `P` holds for `f`.
-/
protected lemma mk' {P : MorphismProperty Scheme} [P.RespectsIso]
    (restrict : ∀ {X Y : Scheme} (f : X ⟶ Y) (U : X.Opens), P f → P (U.ι ≫ f))
    (of_sSup_eq_top :
      ∀ {X Y : Scheme.{u}} (f : X ⟶ Y) {ι : Type u} (U : ι → X.Opens), iSup U = ⊤ →
        (∀ i, P ((U i).ι ≫ f)) → P f) :
    IsLocalAtSource P 
goal: AlgebraicGeometry.IsLocalAtSource P

full_name: AlgebraicGeometry.IsLocalAtSource.inf
code: /-- The intersection of two morphism properties that are local at the target is again local at
the target. -/
instance inf (P Q : MorphismProperty Scheme) [IsLocalAtSource P] [IsLocalAtSource Q] :
    IsLocalAtSource (P ⊓ Q) 
goal: AlgebraicGeometry.IsLocalAtSource (P ⊓ Q)

full_name: AlgebraicGeometry.IsLocalAtSource.comp
code: lemma comp {UX : Scheme.{u}} (H : P f) (i : UX ⟶ X) [IsOpenImmersion i] :
    P (i ≫ f) 
goal: P (i ≫ f)

full_name: AlgebraicGeometry.IsLocalAtSource.of_iSup_eq_top
code: lemma of_iSup_eq_top {ι} (U : ι → X.Opens) (hU : iSup U = ⊤)
    (H : ∀ i, P ((U i).ι ≫ f)) : P f 
goal: P f

full_name: AlgebraicGeometry.IsLocalAtSource.iff_of_iSup_eq_top
code: theorem iff_of_iSup_eq_top {ι} (U : ι → X.Opens) (hU : iSup U = ⊤) :
    P f ↔ ∀ i, P ((U i).ι ≫ f) 
goal: P f ↔ ∀ (i : ι), P ((U i).ι ≫ f)

full_name: AlgebraicGeometry.IsLocalAtSource.of_openCover
code: lemma of_openCover (H : ∀ i, P (𝒰.map i ≫ f)) : P f 
goal: P f

full_name: AlgebraicGeometry.IsLocalAtSource.iff_of_openCover
code: theorem iff_of_openCover :
    P f ↔ ∀ i, P (𝒰.map i ≫ f) 
goal: P f ↔ ∀ (i : 𝒰.J), P (𝒰.map i ≫ f)

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

full_name: AlgebraicGeometry.IsLocalAtSource.isLocalAtTarget
code: lemma isLocalAtTarget [P.IsMultiplicative]
    (hP : ∀ {X Y Z : Scheme.{u}} (f : X ⟶ Y) (g : Y ⟶ Z) [IsOpenImmersion g], P (f ≫ g) → P f) :
    IsLocalAtTarget P 
goal: AlgebraicGeometry.IsLocalAtTarget P

full_name: AlgebraicGeometry.AffineTargetMorphismProperty
code: /-- An `AffineTargetMorphismProperty` is a class of morphisms from an arbitrary scheme into an
affine scheme. -/
def AffineTargetMorphismProperty 
goal: Type (u_1 + 1)

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.ext
code: @[ext]
lemma ext {P Q : AffineTargetMorphismProperty}
    (H : ∀ ⦃X Y : Scheme⦄ (f : X ⟶ Y) [IsAffine Y], P f ↔ Q f) : P = Q 
goal: P = Q

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.of
code: /-- The restriction of a `MorphismProperty Scheme` to morphisms with affine target. -/
def of (P : MorphismProperty Scheme) : AffineTargetMorphismProperty 
goal: AlgebraicGeometry.AffineTargetMorphismProperty

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.toProperty
code: /-- An `AffineTargetMorphismProperty` can be extended to a `MorphismProperty` such that it
*never* holds when the target is not affine -/
def toProperty (P : AffineTargetMorphismProperty) :
    MorphismProperty Scheme 
goal: CategoryTheory.MorphismProperty AlgebraicGeometry.Scheme

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.toProperty_apply
code: theorem toProperty_apply (P : AffineTargetMorphismProperty)
    {X Y : Scheme} (f : X ⟶ Y) [i : IsAffine Y] : P.toProperty f ↔ P f 
goal: P.toProperty f ↔ P f

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.cancel_left_of_respectsIso
code: theorem cancel_left_of_respectsIso
    (P : AffineTargetMorphismProperty) [P.toProperty.RespectsIso]
    {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [IsIso f] [IsAffine Z] : P (f ≫ g) ↔ P g 
goal: P (f ≫ g) ↔ P g

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.cancel_right_of_respectsIso
code: theorem cancel_right_of_respectsIso
    (P : AffineTargetMorphismProperty) [P.toProperty.RespectsIso]
    {X Y Z : Scheme} (f : X ⟶ Y) (g : Y ⟶ Z) [IsIso g] [IsAffine Z] [IsAffine Y] :
    P (f ≫ g) ↔ P f 
goal: P (f ≫ g) ↔ P f

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.arrow_mk_iso_iff
code: theorem arrow_mk_iso_iff
    (P : AffineTargetMorphismProperty) [P.toProperty.RespectsIso]
    {X Y X' Y' : Scheme} {f : X ⟶ Y} {f' : X' ⟶ Y'}
    (e : Arrow.mk f ≅ Arrow.mk f') {h : IsAffine Y} :
    letI : IsAffine Y' := isAffine_of_isIso (Y := Y) e.inv.right
    P f ↔ P f' 
goal: P f ↔ P f'

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.respectsIso_mk
code: theorem respectsIso_mk {P : AffineTargetMorphismProperty}
    (h₁ : ∀ {X Y Z} (e : X ≅ Y) (f : Y ⟶ Z) [IsAffine Z], P f → P (e.hom ≫ f))
    (h₂ : ∀ {X Y Z} (e : Y ≅ Z) (f : X ⟶ Y) [h : IsAffine Y],
      P f → @P _ _ (f ≫ e.hom) (isAffine_of_isIso e.inv)) :
    P.toProperty.RespectsIso 
goal: P.toProperty.RespectsIso

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.respectsIso_of
code: instance respectsIso_of
    (P : MorphismProperty Scheme) [P.RespectsIso] :
    (of P).toProperty.RespectsIso 
goal: (AlgebraicGeometry.AffineTargetMorphismProperty.of P).toProperty.RespectsIso

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.IsLocal
code: /-- We say that `P : AffineTargetMorphismProperty` is a local property if
1. `P` respects isomorphisms.
2. If `P` holds for `f : X ⟶ Y`, then `P` holds for `f ∣_ Y.basicOpen r` for any
  global section `r`.
3. If `P` holds for `f ∣_ Y.basicOpen r` for all `r` in a spanning set of the global sections,
  then `P` holds for `f`.
-/
class IsLocal (P : AffineTargetMorphismProperty) : Prop where
  /-- `P` as a morphism property respects isomorphisms -/
  respectsIso : P.toProperty.RespectsIso
  /-- `P` is stable under restriction to basic open set of global sections. -/
  to_basicOpen :
    ∀ {X Y : Scheme} [IsAffine Y] (f : X ⟶ Y) (r : Γ(Y, ⊤)), P f → P (f ∣_ Y.basicOpen r)
  /-- `P` for `f` if `P` holds for `f` restricted to basic sets of a spanning set of the global
    sections -/
  of_basicOpenCover :
    ∀ {X Y : Scheme} [IsAffine Y] (f : X ⟶ Y) (s : Finset Γ(Y, ⊤))
      (_ : Ideal.span (s : Set Γ(Y, ⊤)) = ⊤), (∀ r : s, P (f ∣_ Y.basicOpen r.1)) → P f
goal: Prop

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.IsLocal.to_basicOpen
code: /-- We say that `P : AffineTargetMorphismProperty` is a local property if
1. `P` respects isomorphisms.
2. If `P` holds for `f : X ⟶ Y`, then `P` holds for `f ∣_ Y.basicOpen r` for any
  global section `r`.
3. If `P` holds for `f ∣_ Y.basicOpen r` for all `r` in a spanning set of the global sections,
  then `P` holds for `f`.
-/
class IsLocal (P : AffineTargetMorphismProperty) : Prop where
  /-- `P` as a morphism property respects isomorphisms -/
  respectsIso : P.toProperty.RespectsIso
  /-- `P` is stable under restriction to basic open set of global sections. -/
  to_basicOpen :
    ∀ {X Y : Scheme} [IsAffine Y] (f : X ⟶ Y) (r : Γ(Y, ⊤)), P f → P (f ∣_ Y.basicOpen r)
  /-- `P` for `f` if `P` holds for `f` restricted to basic sets of a spanning set of the global
    sections -/
  of_basicOpenCover :
    ∀ {X Y : Scheme} [IsAffine Y] (f : X ⟶ Y) (s : Finset Γ(Y, ⊤))
      (_ : Ideal.span (s : Set Γ(Y, ⊤)) = ⊤), (∀ r : s, P (f ∣_ Y.basicOpen r.1)) → P f
goal: P f → P (f ∣_ Y.basicOpen r)

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.IsLocal.of_basicOpenCover
code: /-- We say that `P : AffineTargetMorphismProperty` is a local property if
1. `P` respects isomorphisms.
2. If `P` holds for `f : X ⟶ Y`, then `P` holds for `f ∣_ Y.basicOpen r` for any
  global section `r`.
3. If `P` holds for `f ∣_ Y.basicOpen r` for all `r` in a spanning set of the global sections,
  then `P` holds for `f`.
-/
class IsLocal (P : AffineTargetMorphismProperty) : Prop where
  /-- `P` as a morphism property respects isomorphisms -/
  respectsIso : P.toProperty.RespectsIso
  /-- `P` is stable under restriction to basic open set of global sections. -/
  to_basicOpen :
    ∀ {X Y : Scheme} [IsAffine Y] (f : X ⟶ Y) (r : Γ(Y, ⊤)), P f → P (f ∣_ Y.basicOpen r)
  /-- `P` for `f` if `P` holds for `f` restricted to basic sets of a spanning set of the global
    sections -/
  of_basicOpenCover :
    ∀ {X Y : Scheme} [IsAffine Y] (f : X ⟶ Y) (s : Finset Γ(Y, ⊤))
      (_ : Ideal.span (s : Set Γ(Y, ⊤)) = ⊤), (∀ r : s, P (f ∣_ Y.basicOpen r.1)) → P f
goal: Ideal.span ↑s = ⊤ → (∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)) → P f

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.IsLocal.respectsIso
code: /-- We say that `P : AffineTargetMorphismProperty` is a local property if
1. `P` respects isomorphisms.
2. If `P` holds for `f : X ⟶ Y`, then `P` holds for `f ∣_ Y.basicOpen r` for any
  global section `r`.
3. If `P` holds for `f ∣_ Y.basicOpen r` for all `r` in a spanning set of the global sections,
  then `P` holds for `f`.
-/
class IsLocal (P : AffineTargetMorphismProperty) : Prop where
  /-- `P` as a morphism property respects isomorphisms -/
  respectsIso : P.toProperty.RespectsIso
  /-- `P` is stable under restriction to basic open set of global sections. -/
  to_basicOpen :
    ∀ {X Y : Scheme} [IsAffine Y] (f : X ⟶ Y) (r : Γ(Y, ⊤)), P f → P (f ∣_ Y.basicOpen r)
  /-- `P` for `f` if `P` holds for `f` restricted to basic sets of a spanning set of the global
    sections -/
  of_basicOpenCover :
    ∀ {X Y : Scheme} [IsAffine Y] (f : X ⟶ Y) (s : Finset Γ(Y, ⊤))
      (_ : Ideal.span (s : Set Γ(Y, ⊤)) = ⊤), (∀ r : s, P (f ∣_ Y.basicOpen r.1)) → P f
goal: P.toProperty.RespectsIso

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.instIsLocalOfOfIsLocalAtTarget
code: instance (P : MorphismProperty Scheme) [IsLocalAtTarget P] : (of P).IsLocal 
goal: (AlgebraicGeometry.AffineTargetMorphismProperty.of P).IsLocal

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.StableUnderBaseChange
code: /-- A `P : AffineTargetMorphismProperty` is stable under base change if `P` holds for `Y ⟶ S`
implies that `P` holds for `X ×ₛ Y ⟶ X` with `X` and `S` affine schemes. -/
def StableUnderBaseChange (P : AffineTargetMorphismProperty) : Prop 
goal: Prop

full_name: AlgebraicGeometry.AffineTargetMorphismProperty.StableUnderBaseChange.mk
code: lemma StableUnderBaseChange.mk (P : AffineTargetMorphismProperty) [P.toProperty.RespectsIso]
    (H : ∀ ⦃X Y S : Scheme⦄ [IsAffine S] [IsAffine X] (f : X ⟶ S) (g : Y ⟶ S),
      P g → P (pullback.fst f g)) : P.StableUnderBaseChange 
goal: P.StableUnderBaseChange

full_name: AlgebraicGeometry.targetAffineLocally
code: /-- For a `P : AffineTargetMorphismProperty`, `targetAffineLocally P` holds for
`f : X ⟶ Y` whenever `P` holds for the restriction of `f` on every affine open subset of `Y`. -/
def targetAffineLocally (P : AffineTargetMorphismProperty) : MorphismProperty Scheme 
goal: CategoryTheory.MorphismProperty AlgebraicGeometry.Scheme

full_name: AlgebraicGeometry.of_targetAffineLocally_of_isPullback
code: theorem of_targetAffineLocally_of_isPullback
    {P : AffineTargetMorphismProperty} [P.IsLocal]
    {X Y UX UY : Scheme.{u}} [IsAffine UY] {f : X ⟶ Y} {iY : UY ⟶ Y} [IsOpenImmersion iY]
    {iX : UX ⟶ X} {f' : UX ⟶ UY} (h : IsPullback iX f' f iY) (hf : targetAffineLocally P f) :
    P f' 
goal: P f'

full_name: AlgebraicGeometry.instRespectsIsoSchemeTargetAffineLocallyOfToProperty
code: instance (P : AffineTargetMorphismProperty) [P.toProperty.RespectsIso] :
    (targetAffineLocally P).RespectsIso 
goal: (AlgebraicGeometry.targetAffineLocally P).RespectsIso

full_name: AlgebraicGeometry.HasAffineProperty
code: /--
`HasAffineProperty P Q` is a type class asserting that `P` is local at the target, and over affine
schemes, it is equivalent to `Q : AffineTargetMorphismProperty`.
To make the proofs easier, we state it instead as
1. `Q` is local at the target
2. `P f` if and only if `∀ U, Q (f ∣_ U)` ranging over all affine opens of `U`.
See `HasAffineProperty.iff`.
-/
class HasAffineProperty (P : MorphismProperty Scheme)
    (Q : outParam AffineTargetMorphismProperty) : Prop where
  isLocal_affineProperty : Q.IsLocal
  eq_targetAffineLocally' : P = targetAffineLocally Q
goal: Prop

full_name: AlgebraicGeometry.HasAffineProperty.eq_targetAffineLocally'
code: /--
`HasAffineProperty P Q` is a type class asserting that `P` is local at the target, and over affine
schemes, it is equivalent to `Q : AffineTargetMorphismProperty`.
To make the proofs easier, we state it instead as
1. `Q` is local at the target
2. `P f` if and only if `∀ U, Q (f ∣_ U)` ranging over all affine opens of `U`.
See `HasAffineProperty.iff`.
-/
class HasAffineProperty (P : MorphismProperty Scheme)
    (Q : outParam AffineTargetMorphismProperty) : Prop where
  isLocal_affineProperty : Q.IsLocal
  eq_targetAffineLocally' : P = targetAffineLocally Q
goal: P = AlgebraicGeometry.targetAffineLocally Q

full_name: AlgebraicGeometry.HasAffineProperty.isLocal_affineProperty
code: /--
`HasAffineProperty P Q` is a type class asserting that `P` is local at the target, and over affine
schemes, it is equivalent to `Q : AffineTargetMorphismProperty`.
To make the proofs easier, we state it instead as
1. `Q` is local at the target
2. `P f` if and only if `∀ U, Q (f ∣_ U)` ranging over all affine opens of `U`.
See `HasAffineProperty.iff`.
-/
class HasAffineProperty (P : MorphismProperty Scheme)
    (Q : outParam AffineTargetMorphismProperty) : Prop where
  isLocal_affineProperty : Q.IsLocal
  eq_targetAffineLocally' : P = targetAffineLocally Q
goal: AlgebraicGeometry.AffineTargetMorphismProperty.IsLocal Q

full_name: AlgebraicGeometry.HasAffineProperty.instTargetAffineLocallyOfIsLocal
code: instance (Q : AffineTargetMorphismProperty) [Q.IsLocal] :
    HasAffineProperty (targetAffineLocally Q) Q 
goal: AlgebraicGeometry.HasAffineProperty (AlgebraicGeometry.targetAffineLocally Q) Q

full_name: AlgebraicGeometry.HasAffineProperty.eq_targetAffineLocally
code: lemma eq_targetAffineLocally : P = targetAffineLocally Q 
goal: P = AlgebraicGeometry.targetAffineLocally Q

full_name: AlgebraicGeometry.HasAffineProperty.of_isLocalAtTarget
code: /-- Every property local at the target can be associated with an affine target property.
This is not an instance as the associated property can often take on simpler forms. -/
lemma of_isLocalAtTarget (P) [IsLocalAtTarget P] :
    HasAffineProperty P (AffineTargetMorphismProperty.of P) 
goal: AlgebraicGeometry.HasAffineProperty P (AlgebraicGeometry.AffineTargetMorphismProperty.of P)

full_name: AlgebraicGeometry.HasAffineProperty.copy
code: lemma copy {P P'} {Q Q'} [HasAffineProperty P Q]
    (e : P = P') (e' : Q = Q') : HasAffineProperty P' Q' 
goal: AlgebraicGeometry.HasAffineProperty P' Q'

full_name: AlgebraicGeometry.HasAffineProperty.of_isPullback
code: theorem of_isPullback {UX UY : Scheme.{u}} [IsAffine UY] {iY : UY ⟶ Y} [IsOpenImmersion iY]
    {iX : UX ⟶ X} {f' : UX ⟶ UY} (h : IsPullback iX f' f iY) (hf : P f) :
    Q f' 
goal: Q f'

full_name: AlgebraicGeometry.HasAffineProperty.restrict
code: theorem restrict (hf : P f) (U : Y.affineOpens) :
    Q (f ∣_ U) 
goal: Q (f ∣_ ↑U)

full_name: AlgebraicGeometry.HasAffineProperty.instRespectsIsoScheme
code: instance (priority := 900) : P.RespectsIso 
goal: P.RespectsIso

full_name: AlgebraicGeometry.HasAffineProperty.of_iSup_eq_top
code: theorem of_iSup_eq_top
    {ι} (U : ι → Y.affineOpens) (hU : ⨆ i, (U i : Y.Opens) = ⊤)
    (hU' : ∀ i, Q (f ∣_ U i)) :
    P f 
goal: P f

full_name: AlgebraicGeometry.HasAffineProperty.iff_of_iSup_eq_top
code: theorem iff_of_iSup_eq_top
    {ι} (U : ι → Y.affineOpens) (hU : ⨆ i, (U i : Y.Opens) = ⊤) :
    P f ↔ ∀ i, Q (f ∣_ U i) 
goal: P f ↔ ∀ (i : ι), Q (f ∣_ ↑(U i))

full_name: AlgebraicGeometry.HasAffineProperty.of_openCover
code: theorem of_openCover
    (𝒰 : Y.OpenCover) [∀ i, IsAffine (𝒰.obj i)] (h𝒰 : ∀ i, Q (𝒰.pullbackHom f i)) :
    P f 
goal: P f

full_name: AlgebraicGeometry.HasAffineProperty.iff_of_openCover
code: theorem iff_of_openCover (𝒰 : Y.OpenCover) [∀ i, IsAffine (𝒰.obj i)] :
    P f ↔ ∀ i, Q (𝒰.pullbackHom f i) 
goal: P f ↔ ∀ (i : (𝒰.pullbackCover f).J), Q (𝒰.pullbackHom f i)

full_name: AlgebraicGeometry.HasAffineProperty.iff_of_isAffine
code: theorem iff_of_isAffine [IsAffine Y] : P f ↔ Q f 
goal: P f ↔ Q f

full_name: AlgebraicGeometry.HasAffineProperty.instIsLocalAtTarget
code: instance (priority := 900) : IsLocalAtTarget P 
goal: AlgebraicGeometry.IsLocalAtTarget P

full_name: AlgebraicGeometry.HasAffineProperty.iff
code: protected theorem iff :
    HasAffineProperty P Q ↔ IsLocalAtTarget P ∧ Q = of P 
goal: AlgebraicGeometry.HasAffineProperty P Q ↔
  AlgebraicGeometry.IsLocalAtTarget P ∧ Q = AlgebraicGeometry.AffineTargetMorphismProperty.of P

full_name: _private.Mathlib.AlgebraicGeometry.Morphisms.Basic.0.AlgebraicGeometry.HasAffineProperty.pullback_fst_of_right
code: private theorem pullback_fst_of_right (hP' : Q.StableUnderBaseChange)
    {X Y S : Scheme} (f : X ⟶ S) (g : Y ⟶ S) [IsAffine S] (H : Q g) :
    P (pullback.fst f g) 
goal: P (CategoryTheory.Limits.pullback.fst f g)

full_name: AlgebraicGeometry.HasAffineProperty.stableUnderBaseChange
code: theorem stableUnderBaseChange (hP' : Q.StableUnderBaseChange) :
    P.StableUnderBaseChange 
goal: P.StableUnderBaseChange

full_name: AlgebraicGeometry.HasAffineProperty.isLocalAtSource
code: lemma isLocalAtSource
    (H : ∀ {X Y : Scheme.{u}} (f : X ⟶ Y) [IsAffine Y] (𝒰 : Scheme.OpenCover.{u} X),
        Q f ↔ ∀ i, Q (𝒰.map i ≫ f)) : IsLocalAtSource P 
goal: AlgebraicGeometry.IsLocalAtSource P