Theorem: AlgebraicGeometry.sourceAffineLocally_isLocal
File: Mathlib/AlgebraicGeometry/Morphisms/RingHomProperties.lean

tactic: constructor
state_before: P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
⊢ (sourceAffineLocally P).IsLocal
state_after: case RespectsIso
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
⊢ (sourceAffineLocally P).toProperty.RespectsIso

case toBasicOpen
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
⊢ ∀ {X Y : Scheme} [inst : IsAffine Y] (f : X ⟶ Y) (r : ↑Γ(Y, ⊤)),
    sourceAffineLocally P f → sourceAffineLocally P (f ∣_ Y.basicOpen r)

case ofBasicOpenCover
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
⊢ ∀ {X Y : Scheme} [inst : IsAffine Y] (f : X ⟶ Y) (s : Finset ↑Γ(Y, ⊤)),
    Ideal.span ↑s = ⊤ → (∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)) → sourceAffineLocally P f

tactic: exact sourceAffineLocally_respectsIso h₁
state_before: case RespectsIso
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
⊢ (sourceAffineLocally P).toProperty.RespectsIso
state_after: no goals

tactic: introv H U
state_before: case toBasicOpen
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
⊢ ∀ {X Y : Scheme} [inst : IsAffine Y] (f : X ⟶ Y) (r : ↑Γ(Y, ⊤)),
    sourceAffineLocally P f → sourceAffineLocally P (f ∣_ Y.basicOpen r)
state_after: case toBasicOpen
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
H : sourceAffineLocally P f
U : ↑(X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen r).affineOpens
⊢ P (Scheme.Γ.map ((X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen r).ofRestrict ⋯ ≫ f ∣_ Y.basicOpen r).op)

tactic: apply scheme_restrict_basicOpen_of_localizationPreserves h₁ h₂
state_before: case toBasicOpen
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
H : sourceAffineLocally P f
U : ↑(X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen r).affineOpens
⊢ P (Scheme.Γ.map ((X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen r).ofRestrict ⋯ ≫ f ∣_ Y.basicOpen r).op)
state_after: case toBasicOpen.H
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
H : sourceAffineLocally P f
U : ↑(X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen r).affineOpens
⊢ sourceAffineLocally P f

tactic: assumption
state_before: case toBasicOpen.H
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
r : ↑Γ(Y, ⊤)
H : sourceAffineLocally P f
U : ↑(X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen r).affineOpens
⊢ sourceAffineLocally P f
state_after: no goals

tactic: introv hs hs' U
state_before: case ofBasicOpenCover
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
⊢ ∀ {X Y : Scheme} [inst : IsAffine Y] (f : X ⟶ Y) (s : Finset ↑Γ(Y, ⊤)),
    Ideal.span ↑s = ⊤ → (∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)) → sourceAffineLocally P f
state_after: case ofBasicOpenCover
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
⊢ P (Scheme.Γ.map (X.ofRestrict ⋯ ≫ f).op)

tactic: apply h₃ _ _ hs
state_before: case ofBasicOpenCover
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
⊢ P (Scheme.Γ.map (X.ofRestrict ⋯ ≫ f).op)
state_after: case ofBasicOpenCover
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
⊢ ∀ (r : ↑↑s), P (Localization.awayMap (Scheme.Γ.map (X.ofRestrict ⋯ ≫ f).op) ↑r)

tactic: intro r
state_before: case ofBasicOpenCover
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
⊢ ∀ (r : ↑↑s), P (Localization.awayMap (Scheme.Γ.map (X.ofRestrict ⋯ ≫ f).op) ↑r)
state_after: case ofBasicOpenCover
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
⊢ P (Localization.awayMap (Scheme.Γ.map (X.ofRestrict ⋯ ≫ f).op) ↑r)

tactic: have := hs' r ⟨(Opens.map (X.ofRestrict _).1.base).obj U.1, ?_⟩
state_before: case ofBasicOpenCover
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
⊢ P (Localization.awayMap (Scheme.Γ.map (X.ofRestrict ⋯ ≫ f).op) ↑r)
state_after: case ofBasicOpenCover.refine_2
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
this : P (Scheme.Γ.map ((X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen ↑r).ofRestrict ⋯ ≫ f ∣_ Y.basicOpen ↑r).op)
⊢ P (Localization.awayMap (Scheme.Γ.map (X.ofRestrict ⋯ ≫ f).op) ↑r)

case ofBasicOpenCover.refine_1
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
⊢ X.ofRestrict ⋯ ⁻¹ᵁ ↑U ∈ (X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen ↑r).affineOpens

tactic: rwa [h₁.ofRestrict_morphismRestrict_iff] at this
state_before: case ofBasicOpenCover.refine_2
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
this : P (Scheme.Γ.map ((X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen ↑r).ofRestrict ⋯ ≫ f ∣_ Y.basicOpen ↑r).op)
⊢ P (Localization.awayMap (Scheme.Γ.map (X.ofRestrict ⋯ ≫ f).op) ↑r)
state_after: case ofBasicOpenCover.refine_2.hU
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
this : P (Scheme.Γ.map ((X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen ↑r).ofRestrict ⋯ ≫ f ∣_ Y.basicOpen ↑r).op)
⊢ IsAffineOpen ↑U

case ofBasicOpenCover.refine_2.e
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
this : P (Scheme.Γ.map ((X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen ↑r).ofRestrict ⋯ ≫ f ∣_ Y.basicOpen ↑r).op)
⊢ ↑⟨X.ofRestrict ⋯ ⁻¹ᵁ ↑U, ?ofBasicOpenCover.refine_1⟩ = Scheme.ιOpens (f ⁻¹ᵁ Y.basicOpen ↑r) ⁻¹ᵁ ↑U

tactic: exact U.2
state_before: case ofBasicOpenCover.refine_2.hU
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
this : P (Scheme.Γ.map ((X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen ↑r).ofRestrict ⋯ ≫ f ∣_ Y.basicOpen ↑r).op)
⊢ IsAffineOpen ↑U
state_after: no goals

tactic: rfl
state_before: case ofBasicOpenCover.refine_2.e
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
this : P (Scheme.Γ.map ((X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen ↑r).ofRestrict ⋯ ≫ f ∣_ Y.basicOpen ↑r).op)
⊢ ↑⟨X.ofRestrict ⋯ ⁻¹ᵁ ↑U, ?ofBasicOpenCover.refine_1⟩ = Scheme.ιOpens (f ⁻¹ᵁ Y.basicOpen ↑r) ⁻¹ᵁ ↑U
state_after: no goals

tactic: suffices ∀ (V) (_ : V = (Opens.map f.val.base).obj (Y.basicOpen r.val)),
    IsAffineOpen ((Opens.map (X.ofRestrict V.openEmbedding).1.base).obj U.1) by
  exact this _ rfl
state_before: case ofBasicOpenCover.refine_1
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
⊢ X.ofRestrict ⋯ ⁻¹ᵁ ↑U ∈ (X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen ↑r).affineOpens
state_after: case ofBasicOpenCover.refine_1
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
⊢ ∀ (V : Opens ↑↑X.toPresheafedSpace), V = f ⁻¹ᵁ Y.basicOpen ↑r → IsAffineOpen (X.ofRestrict ⋯ ⁻¹ᵁ ↑U)

tactic: intro V hV
state_before: case ofBasicOpenCover.refine_1
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
⊢ ∀ (V : Opens ↑↑X.toPresheafedSpace), V = f ⁻¹ᵁ Y.basicOpen ↑r → IsAffineOpen (X.ofRestrict ⋯ ⁻¹ᵁ ↑U)
state_after: case ofBasicOpenCover.refine_1
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
V : Opens ↑↑X.toPresheafedSpace
hV : V = f ⁻¹ᵁ Y.basicOpen ↑r
⊢ IsAffineOpen (X.ofRestrict ⋯ ⁻¹ᵁ ↑U)

tactic: rw [Scheme.preimage_basicOpen] at hV
state_before: case ofBasicOpenCover.refine_1
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
V : Opens ↑↑X.toPresheafedSpace
hV : V = f ⁻¹ᵁ Y.basicOpen ↑r
⊢ IsAffineOpen (X.ofRestrict ⋯ ⁻¹ᵁ ↑U)
state_after: case ofBasicOpenCover.refine_1
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
V : Opens ↑↑X.toPresheafedSpace
hV : V = X.basicOpen ((Scheme.Hom.app f ⊤) ↑r)
⊢ IsAffineOpen (X.ofRestrict ⋯ ⁻¹ᵁ ↑U)

tactic: subst hV
state_before: case ofBasicOpenCover.refine_1
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
V : Opens ↑↑X.toPresheafedSpace
hV : V = X.basicOpen ((Scheme.Hom.app f ⊤) ↑r)
⊢ IsAffineOpen (X.ofRestrict ⋯ ⁻¹ᵁ ↑U)
state_after: case ofBasicOpenCover.refine_1
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
⊢ IsAffineOpen (X.ofRestrict ⋯ ⁻¹ᵁ ↑U)

tactic: exact U.2.ιOpens_basicOpen_preimage (Scheme.Γ.map f.op r.1)
state_before: case ofBasicOpenCover.refine_1
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
⊢ IsAffineOpen (X.ofRestrict ⋯ ⁻¹ᵁ ↑U)
state_after: no goals

tactic: exact this _ rfl
state_before: P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
h₁ : RingHom.RespectsIso P
h₂ : RingHom.LocalizationPreserves P
h₃ : RingHom.OfLocalizationSpan P
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
s : Finset ↑Γ(Y, ⊤)
hs : Ideal.span ↑s = ⊤
hs' : ∀ (r : { x // x ∈ s }), sourceAffineLocally P (f ∣_ Y.basicOpen ↑r)
U : ↑X.affineOpens
r : ↑↑s
this : ∀ (V : Opens ↑↑X.toPresheafedSpace), V = f ⁻¹ᵁ Y.basicOpen ↑r → IsAffineOpen (X.ofRestrict ⋯ ⁻¹ᵁ ↑U)
⊢ X.ofRestrict ⋯ ⁻¹ᵁ ↑U ∈ (X ∣_ᵤ f ⁻¹ᵁ Y.basicOpen ↑r).affineOpens
state_after: no goals