Theorem: AlgebraicGeometry.AffineTargetMorphismProperty.isLocalOfOpenCoverImply
File: Mathlib/AlgebraicGeometry/Morphisms/Basic.lean

tactic: refine ⟨hP, ?_, ?_⟩
state_before: P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
⊢ P.IsLocal
state_after: case refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
⊢ ∀ {X Y : Scheme} [inst : IsAffine Y] (f : X ⟶ Y) (r : ↑Γ(Y, ⊤)), P f → P (f ∣_ Y.basicOpen r)

case refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
⊢ ∀ {X Y : Scheme} [inst : IsAffine Y] (f : X ⟶ Y) (s : Finset ↑Γ(Y, ⊤)),
    Ideal.span ↑s = ⊤ → (∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)) → P f

tactic: introv h
state_before: case refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
⊢ ∀ {X Y : Scheme} [inst : IsAffine Y] (f : X ⟶ Y) (r : ↑Γ(Y, ⊤)), P f → P (f ∣_ Y.basicOpen r)
state_after: case refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
⊢ P (f ∣_ Y.basicOpen r)

tactic: haveI : IsAffine _ := (isAffineOpen_top Y).basicOpen r
state_before: case refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
⊢ P (f ∣_ Y.basicOpen r)
state_after: case refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
⊢ P (f ∣_ Y.basicOpen r)

tactic: delta morphismRestrict
state_before: case refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
⊢ P (f ∣_ Y.basicOpen r)
state_after: case refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
⊢ P ((pullbackRestrictIsoRestrict f (Y.basicOpen r)).inv ≫ pullback.snd)

tactic: rw [affine_cancel_left_isIso hP]
state_before: case refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
⊢ P ((pullbackRestrictIsoRestrict f (Y.basicOpen r)).inv ≫ pullback.snd)
state_after: case refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
⊢ P pullback.snd

tactic: refine @H _ _ f ⟨Scheme.openCoverOfIsIso (𝟙 Y), ?_, ?_⟩ _ (Y.ofRestrict _) _ _
state_before: case refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
⊢ P pullback.snd
state_after: case refine_1.refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
⊢ ∀ (i : (Scheme.openCoverOfIsIso (𝟙 Y)).J), IsAffine ((Scheme.openCoverOfIsIso (𝟙 Y)).obj i)

case refine_1.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
⊢ ∀ (i : (Scheme.openCoverOfIsIso (𝟙 Y)).J), P pullback.snd

tactic: intro i
state_before: case refine_1.refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
⊢ ∀ (i : (Scheme.openCoverOfIsIso (𝟙 Y)).J), IsAffine ((Scheme.openCoverOfIsIso (𝟙 Y)).obj i)
state_after: case refine_1.refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
i : (Scheme.openCoverOfIsIso (𝟙 Y)).J
⊢ IsAffine ((Scheme.openCoverOfIsIso (𝟙 Y)).obj i)

tactic: dsimp
state_before: case refine_1.refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
i : (Scheme.openCoverOfIsIso (𝟙 Y)).J
⊢ IsAffine ((Scheme.openCoverOfIsIso (𝟙 Y)).obj i)
state_after: case refine_1.refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
i : (Scheme.openCoverOfIsIso (𝟙 Y)).J
⊢ IsAffine Y

tactic: infer_instance
state_before: case refine_1.refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
i : (Scheme.openCoverOfIsIso (𝟙 Y)).J
⊢ IsAffine Y
state_after: no goals

tactic: intro i
state_before: case refine_1.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
⊢ ∀ (i : (Scheme.openCoverOfIsIso (𝟙 Y)).J), P pullback.snd
state_after: case refine_1.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
i : (Scheme.openCoverOfIsIso (𝟙 Y)).J
⊢ P pullback.snd

tactic: rwa [← Category.comp_id pullback.snd, ← pullback.condition, affine_cancel_left_isIso hP]
state_before: case refine_1.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
h : P f
this : IsAffine (Y.restrict ⋯)
i : (Scheme.openCoverOfIsIso (𝟙 Y)).J
⊢ P pullback.snd
state_after: no goals

tactic: introv hs hs'
state_before: case refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
⊢ ∀ {X Y : Scheme} [inst : IsAffine Y] (f : X ⟶ Y) (s : Finset ↑Γ(Y, ⊤)),
    Ideal.span ↑s = ⊤ → (∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)) → P f
state_after: case refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
⊢ P f

tactic: replace hs := ((isAffineOpen_top Y).basicOpen_union_eq_self_iff _).mpr hs
state_before: case refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
⊢ P f
state_after: case refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
⊢ P f

tactic: have := H f ⟨Y.openCoverOfSuprEqTop _ hs, ?_, ?_⟩ (𝟙 _)
state_before: case refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
⊢ P f
state_after: case refine_2.refine_3
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
this : P pullback.snd
⊢ P f

case refine_2.refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
⊢ ∀ (i : (Y.openCoverOfSuprEqTop (fun i => Y.basicOpen ↑i) hs).J),
    IsAffine ((Y.openCoverOfSuprEqTop (fun i => Y.basicOpen ↑i) hs).obj i)

case refine_2.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
⊢ ∀ (i : (Y.openCoverOfSuprEqTop (fun i => Y.basicOpen ↑i) hs).J), P pullback.snd

tactic: rwa [← Category.comp_id pullback.snd, ← pullback.condition, affine_cancel_left_isIso hP]
  at this
state_before: case refine_2.refine_3
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
this : P pullback.snd
⊢ P f
state_after: no goals

tactic: intro i
state_before: case refine_2.refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
⊢ ∀ (i : (Y.openCoverOfSuprEqTop (fun i => Y.basicOpen ↑i) hs).J),
    IsAffine ((Y.openCoverOfSuprEqTop (fun i => Y.basicOpen ↑i) hs).obj i)
state_after: case refine_2.refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
i : (Y.openCoverOfSuprEqTop (fun i => Y.basicOpen ↑i) hs).J
⊢ IsAffine ((Y.openCoverOfSuprEqTop (fun i => Y.basicOpen ↑i) hs).obj i)

tactic: exact (isAffineOpen_top Y).basicOpen _
state_before: case refine_2.refine_1
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
i : (Y.openCoverOfSuprEqTop (fun i => Y.basicOpen ↑i) hs).J
⊢ IsAffine ((Y.openCoverOfSuprEqTop (fun i => Y.basicOpen ↑i) hs).obj i)
state_after: no goals

tactic: rintro (i : s)
state_before: case refine_2.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
⊢ ∀ (i : (Y.openCoverOfSuprEqTop (fun i => Y.basicOpen ↑i) hs).J), P pullback.snd
state_after: case refine_2.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
i : { x // x ∈ s }
⊢ P pullback.snd

tactic: specialize hs' i
state_before: case refine_2.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs' : ∀ (r : { x // x ∈ s }), P (f ∣_ Y.basicOpen ↑r)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
i : { x // x ∈ s }
⊢ P pullback.snd
state_after: case refine_2.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
i : { x // x ∈ s }
hs' : P (f ∣_ Y.basicOpen ↑i)
⊢ P pullback.snd

tactic: haveI : IsAffine _ := (isAffineOpen_top Y).basicOpen i.1
state_before: case refine_2.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
i : { x // x ∈ s }
hs' : P (f ∣_ Y.basicOpen ↑i)
⊢ P pullback.snd
state_after: case refine_2.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
i : { x // x ∈ s }
hs' : P (f ∣_ Y.basicOpen ↑i)
this : IsAffine (Y.restrict ⋯)
⊢ P pullback.snd

tactic: delta morphismRestrict at hs'
state_before: case refine_2.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
i : { x // x ∈ s }
hs' : P (f ∣_ Y.basicOpen ↑i)
this : IsAffine (Y.restrict ⋯)
⊢ P pullback.snd
state_after: case refine_2.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
i : { x // x ∈ s }
hs' : P ((pullbackRestrictIsoRestrict f (Y.basicOpen ↑i)).inv ≫ pullback.snd)
this : IsAffine (Y.restrict ⋯)
⊢ P pullback.snd

tactic: rwa [affine_cancel_left_isIso hP] at hs'
state_before: case refine_2.refine_2
P : AffineTargetMorphismProperty
hP : P.toProperty.RespectsIso
H :
  ∀ {X Y : Scheme} (f : X ⟶ Y),
    (∃ 𝒰, ∃ (x : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)), ∀ (i : 𝒰.J), P pullback.snd) →
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], P pullback.snd
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : ⨆ f, Y.basicOpen ↑f = ⊤
i : { x // x ∈ s }
hs' : P ((pullbackRestrictIsoRestrict f (Y.basicOpen ↑i)).inv ≫ pullback.snd)
this : IsAffine (Y.restrict ⋯)
⊢ P pullback.snd
state_after: no goals