Theorem: AlgebraicGeometry.exists_basicOpen_le_affine_inter
File: Mathlib/AlgebraicGeometry/AffineScheme.lean

Proof steps:
state_before: X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
x : ↑↑X.toPresheafedSpace
hx : x ∈ U ⊓ V
⊢ ∃ f g, X.basicOpen f = X.basicOpen g ∧ x ∈ X.basicOpen f
state_after: case intro.intro
X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
x : ↑↑X.toPresheafedSpace
hx : x ∈ U ⊓ V
f : ↑Γ(X, U)
hf₁ : X.basicOpen f ≤ V
hf₂ : ↑⟨x, ⋯⟩ ∈ X.basicOpen f
⊢ ∃ f g, X.basicOpen f = X.basicOpen g ∧ x ∈ X.basicOpen f
tactic: obtain ⟨f, hf₁, hf₂⟩ := hU.exists_basicOpen_le ⟨x, hx.2⟩ hx.1
state_before: case intro.intro
X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
x : ↑↑X.toPresheafedSpace
hx : x ∈ U ⊓ V
f : ↑Γ(X, U)
hf₁ : X.basicOpen f ≤ V
hf₂ : ↑⟨x, ⋯⟩ ∈ X.basicOpen f
⊢ ∃ f g, X.basicOpen f = X.basicOpen g ∧ x ∈ X.basicOpen f
state_after: case intro.intro.intro.intro
X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
x : ↑↑X.toPresheafedSpace
hx : x ∈ U ⊓ V
f : ↑Γ(X, U)
hf₁ : X.basicOpen f ≤ V
hf₂ : ↑⟨x, ⋯⟩ ∈ X.basicOpen f
g : ↑Γ(X, V)
hg₁ : X.basicOpen g ≤ X.basicOpen f
hg₂ : ↑⟨x, hf₂⟩ ∈ X.basicOpen g
⊢ ∃ f g, X.basicOpen f = X.basicOpen g ∧ x ∈ X.basicOpen f
tactic: obtain ⟨g, hg₁, hg₂⟩ := hV.exists_basicOpen_le ⟨x, hf₂⟩ hx.2
state_before: case intro.intro.intro.intro
X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
x : ↑↑X.toPresheafedSpace
hx : x ∈ U ⊓ V
f : ↑Γ(X, U)
hf₁ : X.basicOpen f ≤ V
hf₂ : ↑⟨x, ⋯⟩ ∈ X.basicOpen f
g : ↑Γ(X, V)
hg₁ : X.basicOpen g ≤ X.basicOpen f
hg₂ : ↑⟨x, hf₂⟩ ∈ X.basicOpen g
⊢ ∃ f g, X.basicOpen f = X.basicOpen g ∧ x ∈ X.basicOpen f
state_after: case intro.intro.intro.intro.intro
X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
x : ↑↑X.toPresheafedSpace
hx : x ∈ U ⊓ V
f : ↑Γ(X, U)
hf₁ : X.basicOpen f ≤ V
hf₂ : ↑⟨x, ⋯⟩ ∈ X.basicOpen f
g : ↑Γ(X, V)
hg₁ : X.basicOpen g ≤ X.basicOpen f
hg₂ : ↑⟨x, hf₂⟩ ∈ X.basicOpen g
f' : ↑Γ(X, U)
hf' : X.basicOpen f' = X.basicOpen ((X.presheaf.map (homOfLE hf₁).op) g)
⊢ ∃ f g, X.basicOpen f = X.basicOpen g ∧ x ∈ X.basicOpen f
tactic: obtain ⟨f', hf'⟩ :=
    basicOpen_basicOpen_is_basicOpen hU f (X.presheaf.map (homOfLE hf₁ : _ ⟶ V).op g)
state_before: case intro.intro.intro.intro.intro
X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
x : ↑↑X.toPresheafedSpace
hx : x ∈ U ⊓ V
f : ↑Γ(X, U)
hf₁ : X.basicOpen f ≤ V
hf₂ : ↑⟨x, ⋯⟩ ∈ X.basicOpen f
g : ↑Γ(X, V)
hg₁ : X.basicOpen g ≤ X.basicOpen f
hg₂ : ↑⟨x, hf₂⟩ ∈ X.basicOpen g
f' : ↑Γ(X, U)
hf' : X.basicOpen f' = X.basicOpen ((X.presheaf.map (homOfLE hf₁).op) g)
⊢ ∃ f g, X.basicOpen f = X.basicOpen g ∧ x ∈ X.basicOpen f
state_after: case intro.intro.intro.intro.intro
X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
x : ↑↑X.toPresheafedSpace
hx : x ∈ U ⊓ V
f : ↑Γ(X, U)
hf₁ : X.basicOpen f ≤ V
hf₂ : ↑⟨x, ⋯⟩ ∈ X.basicOpen f
g : ↑Γ(X, V)
hg₁ : X.basicOpen g ≤ X.basicOpen f
hg₂ : ↑⟨x, hf₂⟩ ∈ X.basicOpen g
f' : ↑Γ(X, U)
hf' : X.basicOpen f' = X.toRingedSpace.basicOpen g
⊢ ∃ f g, X.basicOpen f = X.basicOpen g ∧ x ∈ X.basicOpen f
tactic: replace hf' := (hf'.trans (RingedSpace.basicOpen_res _ _ _)).trans (inf_eq_right.mpr hg₁)
state_before: case intro.intro.intro.intro.intro
X Y : Scheme
U : X.Opens
hU : IsAffineOpen U
f✝ : ↑Γ(X, U)
V : X.Opens
hV : IsAffineOpen V
x : ↑↑X.toPresheafedSpace
hx : x ∈ U ⊓ V
f : ↑Γ(X, U)
hf₁ : X.basicOpen f ≤ V
hf₂ : ↑⟨x, ⋯⟩ ∈ X.basicOpen f
g : ↑Γ(X, V)
hg₁ : X.basicOpen g ≤ X.basicOpen f
hg₂ : ↑⟨x, hf₂⟩ ∈ X.basicOpen g
f' : ↑Γ(X, U)
hf' : X.basicOpen f' = X.toRingedSpace.basicOpen g
⊢ ∃ f g, X.basicOpen f = X.basicOpen g ∧ x ∈ X.basicOpen f
state_after: no goals
tactic: exact ⟨f', g, hf', hf'.symm ▸ hg₂⟩