Theorem: AlgebraicGeometry.reduce_to_affine_nbhd
File: Mathlib/AlgebraicGeometry/Properties.lean

Proof steps:
state_before: X : Scheme
P : (X : Scheme) → ↑↑X.toPresheafedSpace → Prop
h₁ : ∀ (R : CommRingCat) (x : ↑↑(Spec R).toPresheafedSpace), P (Spec R) x
h₂ : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsOpenImmersion f] (x : ↑↑X.toPresheafedSpace), P X x → P Y (f.val.base x)
⊢ ∀ (X : Scheme) (x : ↑↑X.toPresheafedSpace), P X x
state_after: X✝ : Scheme
P : (X : Scheme) → ↑↑X.toPresheafedSpace → Prop
h₁ : ∀ (R : CommRingCat) (x : ↑↑(Spec R).toPresheafedSpace), P (Spec R) x
h₂ : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsOpenImmersion f] (x : ↑↑X.toPresheafedSpace), P X x → P Y (f.val.base x)
X : Scheme
x : ↑↑X.toPresheafedSpace
⊢ P X x
tactic: intro X x
state_before: X✝ : Scheme
P : (X : Scheme) → ↑↑X.toPresheafedSpace → Prop
h₁ : ∀ (R : CommRingCat) (x : ↑↑(Spec R).toPresheafedSpace), P (Spec R) x
h₂ : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsOpenImmersion f] (x : ↑↑X.toPresheafedSpace), P X x → P Y (f.val.base x)
X : Scheme
x : ↑↑X.toPresheafedSpace
⊢ P X x
state_after: case intro
X✝ : Scheme
P : (X : Scheme) → ↑↑X.toPresheafedSpace → Prop
h₁ : ∀ (R : CommRingCat) (x : ↑↑(Spec R).toPresheafedSpace), P (Spec R) x
h₂ : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsOpenImmersion f] (x : ↑↑X.toPresheafedSpace), P X x → P Y (f.val.base x)
X : Scheme
x : ↑↑X.toPresheafedSpace
y : ↑↑(X.affineCover.obj (X.affineCover.f x)).toPresheafedSpace
e : (X.affineCover.map (X.affineCover.f x)).val.base y = x
⊢ P X x
tactic: obtain ⟨y, e⟩ := X.affineCover.covers x
state_before: case intro
X✝ : Scheme
P : (X : Scheme) → ↑↑X.toPresheafedSpace → Prop
h₁ : ∀ (R : CommRingCat) (x : ↑↑(Spec R).toPresheafedSpace), P (Spec R) x
h₂ : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsOpenImmersion f] (x : ↑↑X.toPresheafedSpace), P X x → P Y (f.val.base x)
X : Scheme
x : ↑↑X.toPresheafedSpace
y : ↑↑(X.affineCover.obj (X.affineCover.f x)).toPresheafedSpace
e : (X.affineCover.map (X.affineCover.f x)).val.base y = x
⊢ P X x
state_after: case h.e'_2
X✝ : Scheme
P : (X : Scheme) → ↑↑X.toPresheafedSpace → Prop
h₁ : ∀ (R : CommRingCat) (x : ↑↑(Spec R).toPresheafedSpace), P (Spec R) x
h₂ : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsOpenImmersion f] (x : ↑↑X.toPresheafedSpace), P X x → P Y (f.val.base x)
X : Scheme
x : ↑↑X.toPresheafedSpace
y : ↑↑(X.affineCover.obj (X.affineCover.f x)).toPresheafedSpace
e : (X.affineCover.map (X.affineCover.f x)).val.base y = x
⊢ x = (X.affineCover.map (X.affineCover.f x)).val.base y

case intro
X✝ : Scheme
P : (X : Scheme) → ↑↑X.toPresheafedSpace → Prop
h₁ : ∀ (R : CommRingCat) (x : ↑↑(Spec R).toPresheafedSpace), P (Spec R) x
h₂ : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsOpenImmersion f] (x : ↑↑X.toPresheafedSpace), P X x → P Y (f.val.base x)
X : Scheme
x : ↑↑X.toPresheafedSpace
y : ↑↑(X.affineCover.obj (X.affineCover.f x)).toPresheafedSpace
e : (X.affineCover.map (X.affineCover.f x)).val.base y = x
⊢ P (X.affineCover.obj (X.affineCover.f x)) y
tactic: convert h₂ (X.affineCover.map (X.affineCover.f x)) y _
state_before: case intro
X✝ : Scheme
P : (X : Scheme) → ↑↑X.toPresheafedSpace → Prop
h₁ : ∀ (R : CommRingCat) (x : ↑↑(Spec R).toPresheafedSpace), P (Spec R) x
h₂ : ∀ {X Y : Scheme} (f : X ⟶ Y) [inst : IsOpenImmersion f] (x : ↑↑X.toPresheafedSpace), P X x → P Y (f.val.base x)
X : Scheme
x : ↑↑X.toPresheafedSpace
y : ↑↑(X.affineCover.obj (X.affineCover.f x)).toPresheafedSpace
e : (X.affineCover.map (X.affineCover.f x)).val.base y = x
⊢ P (X.affineCover.obj (X.affineCover.f x)) y
state_after: no goals
tactic: apply h₁