Theorem: AlgebraicGeometry.isCompact_basicOpen
File: Mathlib/AlgebraicGeometry/Morphisms/QuasiCompact.lean

tactic: refine ((isCompactOpen_iff_eq_finset_affine_union _).mpr ?_).1
state_before: X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
⊢ IsCompact ↑(X.basicOpen f)
state_after: X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
⊢ ∃ s, s.Finite ∧ ↑(X.basicOpen f) = ⋃ i ∈ s, ↑↑i

tactic: obtain ⟨s, hs, e⟩ := (isCompactOpen_iff_eq_finset_affine_union _).mp ⟨hU, U.isOpen⟩
state_before: X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
⊢ ∃ s, s.Finite ∧ ↑(X.basicOpen f) = ⋃ i ∈ s, ↑↑i
state_after: case intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
⊢ ∃ s, s.Finite ∧ ↑(X.basicOpen f) = ⋃ i ∈ s, ↑↑i

tactic: let g : s → X.affineOpens := by
  intro V
  use V.1 ⊓ X.basicOpen f
  have : V.1.1 ⟶ U := by
    apply homOfLE; change _ ⊆ (U : Set X); rw [e]
    convert Set.subset_iUnion₂ (s := fun (U : X.affineOpens) (_ : U ∈ s) => (U : Set X))
      V V.prop using 1
  erw [← X.toLocallyRingedSpace.toRingedSpace.basicOpen_res this.op]
  exact IsAffineOpen.basicOpen V.1.prop _
state_before: case intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
⊢ ∃ s, s.Finite ∧ ↑(X.basicOpen f) = ⋃ i ∈ s, ↑↑i
state_after: case intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
⊢ ∃ s, s.Finite ∧ ↑(X.basicOpen f) = ⋃ i ∈ s, ↑↑i

tactic: haveI : Finite s := hs.to_subtype
state_before: case intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
⊢ ∃ s, s.Finite ∧ ↑(X.basicOpen f) = ⋃ i ∈ s, ↑↑i
state_after: case intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
⊢ ∃ s, s.Finite ∧ ↑(X.basicOpen f) = ⋃ i ∈ s, ↑↑i

tactic: refine ⟨Set.range g, Set.finite_range g, ?_⟩
state_before: case intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
⊢ ∃ s, s.Finite ∧ ↑(X.basicOpen f) = ⋃ i ∈ s, ↑↑i
state_after: case intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
⊢ ↑(X.basicOpen f) = ⋃ i ∈ Set.range g, ↑↑i

tactic: refine (Set.inter_eq_right.mpr
          (SetLike.coe_subset_coe.2 <| RingedSpace.basicOpen_le _ _)).symm.trans ?_
state_before: case intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
⊢ ↑(X.basicOpen f) = ⋃ i ∈ Set.range g, ↑↑i
state_after: case intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
⊢ ↑U ∩ ↑(X.toRingedSpace.basicOpen f) = ⋃ i ∈ Set.range g, ↑↑i

tactic: rw [e, Set.iUnion₂_inter]
state_before: case intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
⊢ ↑U ∩ ↑(X.toRingedSpace.basicOpen f) = ⋃ i ∈ Set.range g, ↑↑i
state_after: case intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
⊢ ⋃ i ∈ s, ↑↑i ∩ ↑(X.toRingedSpace.basicOpen f) = ⋃ i ∈ Set.range g, ↑↑i

tactic: apply le_antisymm <;> apply Set.iUnion₂_subset
state_before: case intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
⊢ ⋃ i ∈ s, ↑↑i ∩ ↑(X.toRingedSpace.basicOpen f) = ⋃ i ∈ Set.range g, ↑↑i
state_after: case intro.intro.a.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
⊢ ∀ i ∈ s, ↑↑i ∩ ↑(X.toRingedSpace.basicOpen f) ⊆ ⋃ i ∈ Set.range g, ↑↑i

case intro.intro.a.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
⊢ ∀ i ∈ Set.range g, ↑↑i ⊆ ⋃ i ∈ s, ↑↑i ∩ ↑(X.toRingedSpace.basicOpen f)

tactic: intro V
state_before: X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
⊢ ↑s → ↑X.affineOpens
state_after: X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
⊢ ↑X.affineOpens

tactic: use V.1 ⊓ X.basicOpen f
state_before: X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
⊢ ↑X.affineOpens
state_after: case property
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
⊢ ↑↑V ⊓ X.basicOpen f ∈ X.affineOpens

tactic: have : V.1.1 ⟶ U := by
  apply homOfLE; change _ ⊆ (U : Set X); rw [e]
  convert Set.subset_iUnion₂ (s := fun (U : X.affineOpens) (_ : U ∈ s) => (U : Set X))
    V V.prop using 1
state_before: case property
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
⊢ ↑↑V ⊓ X.basicOpen f ∈ X.affineOpens
state_after: case property
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
this : ↑↑V ⟶ U
⊢ ↑↑V ⊓ X.basicOpen f ∈ X.affineOpens

tactic: erw [← X.toLocallyRingedSpace.toRingedSpace.basicOpen_res this.op]
state_before: case property
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
this : ↑↑V ⟶ U
⊢ ↑↑V ⊓ X.basicOpen f ∈ X.affineOpens
state_after: case property
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
this : ↑↑V ⟶ U
⊢ X.toRingedSpace.basicOpen ((X.toRingedSpace.presheaf.map this.op) f) ∈ X.affineOpens

tactic: exact IsAffineOpen.basicOpen V.1.prop _
state_before: case property
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
this : ↑↑V ⟶ U
⊢ X.toRingedSpace.basicOpen ((X.toRingedSpace.presheaf.map this.op) f) ∈ X.affineOpens
state_after: no goals

tactic: apply homOfLE
state_before: X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
⊢ ↑↑V ⟶ U
state_after: case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
⊢ ↑↑V ≤ U

tactic: change _ ⊆ (U : Set X)
state_before: case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
⊢ ↑↑V ≤ U
state_after: case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
⊢ ↑↑↑V ⊆ ↑U

tactic: rw [e]
state_before: case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
⊢ ↑↑↑V ⊆ ↑U
state_after: case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
⊢ ↑↑↑V ⊆ ⋃ i ∈ s, ↑↑i

tactic: convert Set.subset_iUnion₂ (s := fun (U : X.affineOpens) (_ : U ∈ s) => (U : Set X))
  V V.prop using 1
state_before: case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
V : ↑s
⊢ ↑↑↑V ⊆ ⋃ i ∈ s, ↑↑i
state_after: no goals

tactic: intro i hi
state_before: case intro.intro.a.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
⊢ ∀ i ∈ s, ↑↑i ∩ ↑(X.toRingedSpace.basicOpen f) ⊆ ⋃ i ∈ Set.range g, ↑↑i
state_after: case intro.intro.a.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
i : ↑X.affineOpens
hi : i ∈ s
⊢ ↑↑i ∩ ↑(X.toRingedSpace.basicOpen f) ⊆ ⋃ i ∈ Set.range g, ↑↑i

tactic: exact Set.Subset.trans (Set.Subset.rfl : _ ≤ g ⟨i, hi⟩)
  (@Set.subset_iUnion₂ _ _ _
    (fun (i : Scheme.affineOpens X) (_ : i ∈ Set.range g) => (i : Set X.toPresheafedSpace)) _
    (Set.mem_range_self ⟨i, hi⟩))
state_before: case intro.intro.a.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
i : ↑X.affineOpens
hi : i ∈ s
⊢ ↑↑i ∩ ↑(X.toRingedSpace.basicOpen f) ⊆ ⋃ i ∈ Set.range g, ↑↑i
state_after: no goals

tactic: rintro ⟨i, hi⟩ ⟨⟨j, hj⟩, hj'⟩
state_before: case intro.intro.a.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
⊢ ∀ i ∈ Set.range g, ↑↑i ⊆ ⋃ i ∈ s, ↑↑i ∩ ↑(X.toRingedSpace.basicOpen f)
state_after: case intro.intro.a.h.mk.intro.mk
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
i : Opens ↑↑X.toPresheafedSpace
hi : i ∈ X.affineOpens
j : ↑X.affineOpens
hj : j ∈ s
hj' : g ⟨j, hj⟩ = ⟨i, hi⟩
⊢ ↑↑⟨i, hi⟩ ⊆ ⋃ i ∈ s, ↑↑i ∩ ↑(X.toRingedSpace.basicOpen f)

tactic: rw [← hj']
state_before: case intro.intro.a.h.mk.intro.mk
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
i : Opens ↑↑X.toPresheafedSpace
hi : i ∈ X.affineOpens
j : ↑X.affineOpens
hj : j ∈ s
hj' : g ⟨j, hj⟩ = ⟨i, hi⟩
⊢ ↑↑⟨i, hi⟩ ⊆ ⋃ i ∈ s, ↑↑i ∩ ↑(X.toRingedSpace.basicOpen f)
state_after: case intro.intro.a.h.mk.intro.mk
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
i : Opens ↑↑X.toPresheafedSpace
hi : i ∈ X.affineOpens
j : ↑X.affineOpens
hj : j ∈ s
hj' : g ⟨j, hj⟩ = ⟨i, hi⟩
⊢ ↑↑(g ⟨j, hj⟩) ⊆ ⋃ i ∈ s, ↑↑i ∩ ↑(X.toRingedSpace.basicOpen f)

tactic: refine Set.Subset.trans ?_ (Set.subset_iUnion₂ j hj)
state_before: case intro.intro.a.h.mk.intro.mk
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
i : Opens ↑↑X.toPresheafedSpace
hi : i ∈ X.affineOpens
j : ↑X.affineOpens
hj : j ∈ s
hj' : g ⟨j, hj⟩ = ⟨i, hi⟩
⊢ ↑↑(g ⟨j, hj⟩) ⊆ ⋃ i ∈ s, ↑↑i ∩ ↑(X.toRingedSpace.basicOpen f)
state_after: case intro.intro.a.h.mk.intro.mk
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
i : Opens ↑↑X.toPresheafedSpace
hi : i ∈ X.affineOpens
j : ↑X.affineOpens
hj : j ∈ s
hj' : g ⟨j, hj⟩ = ⟨i, hi⟩
⊢ ↑↑(g ⟨j, hj⟩) ⊆ ↑↑j ∩ ↑(X.toRingedSpace.basicOpen f)

tactic: exact Set.Subset.rfl
state_before: case intro.intro.a.h.mk.intro.mk
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact ↑U
f : ↑Γ(X, U)
s : Set ↑X.affineOpens
hs : s.Finite
e : ↑U = ⋃ i ∈ s, ↑↑i
g : ↑s → ↑X.affineOpens := fun V => ⟨↑↑V ⊓ X.basicOpen f, ⋯⟩
this : Finite ↑s
i : Opens ↑↑X.toPresheafedSpace
hi : i ∈ X.affineOpens
j : ↑X.affineOpens
hj : j ∈ s
hj' : g ⟨j, hj⟩ = ⟨i, hi⟩
⊢ ↑↑(g ⟨j, hj⟩) ⊆ ↑↑j ∩ ↑(X.toRingedSpace.basicOpen f)
state_after: no goals