Theorem: AlgebraicGeometry.quasi_compact_affineProperty_iff_quasiSeparatedSpace
File: Mathlib/AlgebraicGeometry/Morphisms/QuasiSeparated.lean

tactic: delta AffineTargetMorphismProperty.diagonal
state_before: X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
⊢ QuasiCompact.affineProperty.diagonal f ↔ QuasiSeparatedSpace ↑↑X.toPresheafedSpace
state_after: X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
⊢ (∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
      [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂],
      QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)) ↔
    QuasiSeparatedSpace ↑↑X.toPresheafedSpace

tactic: rw [quasiSeparatedSpace_iff_affine]
state_before: X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
⊢ (∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
      [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂],
      QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)) ↔
    QuasiSeparatedSpace ↑↑X.toPresheafedSpace
state_after: X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
⊢ (∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
      [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂],
      QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)) ↔
    ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)

tactic: constructor
state_before: X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
⊢ (∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
      [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂],
      QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)) ↔
    ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)
state_after: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
⊢ (∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
      [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂],
      QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)) →
    ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)

case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
⊢ (∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)) →
    ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
      [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂],
      QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)

tactic: intro H U V
state_before: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
⊢ (∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
      [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂],
      QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)) →
    ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)
state_after: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
⊢ IsCompact (↑↑U ∩ ↑↑V)

tactic: haveI : IsAffine _ := U.2
state_before: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
⊢ IsCompact (↑↑U ∩ ↑↑V)
state_after: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this : IsAffine (X.restrict ⋯)
⊢ IsCompact (↑↑U ∩ ↑↑V)

tactic: haveI : IsAffine _ := V.2
state_before: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this : IsAffine (X.restrict ⋯)
⊢ IsCompact (↑↑U ∩ ↑↑V)
state_after: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝ : IsAffine (X.restrict ⋯)
this : IsAffine (X.restrict ⋯)
⊢ IsCompact (↑↑U ∩ ↑↑V)

tactic: let g : pullback (X.ofRestrict U.1.openEmbedding) (X.ofRestrict V.1.openEmbedding) ⟶ X :=
  pullback.fst ≫ X.ofRestrict _
state_before: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝ : IsAffine (X.restrict ⋯)
this : IsAffine (X.restrict ⋯)
⊢ IsCompact (↑↑U ∩ ↑↑V)
state_after: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝ : IsAffine (X.restrict ⋯)
this : IsAffine (X.restrict ⋯)
g : pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯) ⟶ X := pullback.fst ≫ X.ofRestrict ⋯
⊢ IsCompact (↑↑U ∩ ↑↑V)

tactic: have : IsOpenImmersion g := PresheafedSpace.IsOpenImmersion.comp _ _
state_before: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝ : IsAffine (X.restrict ⋯)
this : IsAffine (X.restrict ⋯)
g : pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯) ⟶ X := pullback.fst ≫ X.ofRestrict ⋯
⊢ IsCompact (↑↑U ∩ ↑↑V)
state_after: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝¹ : IsAffine (X.restrict ⋯)
this✝ : IsAffine (X.restrict ⋯)
g : pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯) ⟶ X := pullback.fst ≫ X.ofRestrict ⋯
this : IsOpenImmersion g
⊢ IsCompact (↑↑U ∩ ↑↑V)

tactic: have e := Homeomorph.ofEmbedding _ this.base_open.toEmbedding
state_before: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝¹ : IsAffine (X.restrict ⋯)
this✝ : IsAffine (X.restrict ⋯)
g : pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯) ⟶ X := pullback.fst ≫ X.ofRestrict ⋯
this : IsOpenImmersion g
⊢ IsCompact (↑↑U ∩ ↑↑V)
state_after: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝¹ : IsAffine (X.restrict ⋯)
this✝ : IsAffine (X.restrict ⋯)
g : pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯) ⟶ X := pullback.fst ≫ X.ofRestrict ⋯
this : IsOpenImmersion g
e : ↑↑(pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯)).toPresheafedSpace ≃ₜ ↑(Set.range ⇑g.val.base)
⊢ IsCompact (↑↑U ∩ ↑↑V)

tactic: rw [IsOpenImmersion.range_pullback_to_base_of_left] at e
state_before: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝¹ : IsAffine (X.restrict ⋯)
this✝ : IsAffine (X.restrict ⋯)
g : pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯) ⟶ X := pullback.fst ≫ X.ofRestrict ⋯
this : IsOpenImmersion g
e : ↑↑(pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯)).toPresheafedSpace ≃ₜ ↑(Set.range ⇑g.val.base)
⊢ IsCompact (↑↑U ∩ ↑↑V)
state_after: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝¹ : IsAffine (X.restrict ⋯)
this✝ : IsAffine (X.restrict ⋯)
g : pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯) ⟶ X := pullback.fst ≫ X.ofRestrict ⋯
this : IsOpenImmersion g
e :
  ↑↑(pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯)).toPresheafedSpace ≃ₜ
    ↑(Set.range ⇑(X.ofRestrict ⋯).val.base ∩ Set.range ⇑(X.ofRestrict ⋯).val.base)
⊢ IsCompact (↑↑U ∩ ↑↑V)

tactic: erw [Subtype.range_coe, Subtype.range_coe] at e
state_before: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝¹ : IsAffine (X.restrict ⋯)
this✝ : IsAffine (X.restrict ⋯)
g : pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯) ⟶ X := pullback.fst ≫ X.ofRestrict ⋯
this : IsOpenImmersion g
e :
  ↑↑(pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯)).toPresheafedSpace ≃ₜ
    ↑(Set.range ⇑(X.ofRestrict ⋯).val.base ∩ Set.range ⇑(X.ofRestrict ⋯).val.base)
⊢ IsCompact (↑↑U ∩ ↑↑V)
state_after: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝¹ : IsAffine (X.restrict ⋯)
this✝ : IsAffine (X.restrict ⋯)
g : pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯) ⟶ X := pullback.fst ≫ X.ofRestrict ⋯
this : IsOpenImmersion g
e : ↑↑(pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯)).toPresheafedSpace ≃ₜ ↑(↑↑U ∩ ↑↑V)
⊢ IsCompact (↑↑U ∩ ↑↑V)

tactic: rw [isCompact_iff_compactSpace]
state_before: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝¹ : IsAffine (X.restrict ⋯)
this✝ : IsAffine (X.restrict ⋯)
g : pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯) ⟶ X := pullback.fst ≫ X.ofRestrict ⋯
this : IsOpenImmersion g
e : ↑↑(pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯)).toPresheafedSpace ≃ₜ ↑(↑↑U ∩ ↑↑V)
⊢ IsCompact (↑↑U ∩ ↑↑V)
state_after: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝¹ : IsAffine (X.restrict ⋯)
this✝ : IsAffine (X.restrict ⋯)
g : pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯) ⟶ X := pullback.fst ≫ X.ofRestrict ⋯
this : IsOpenImmersion g
e : ↑↑(pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯)).toPresheafedSpace ≃ₜ ↑(↑↑U ∩ ↑↑V)
⊢ CompactSpace ↑(↑↑U ∩ ↑↑V)

tactic: exact @Homeomorph.compactSpace _ _ _ _ (H _ _) e
state_before: case mp
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
H :
  ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
    [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂], QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
U V : ↑X.affineOpens
this✝¹ : IsAffine (X.restrict ⋯)
this✝ : IsAffine (X.restrict ⋯)
g : pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯) ⟶ X := pullback.fst ≫ X.ofRestrict ⋯
this : IsOpenImmersion g
e : ↑↑(pullback (X.ofRestrict ⋯) (X.ofRestrict ⋯)).toPresheafedSpace ≃ₜ ↑(↑↑U ∩ ↑↑V)
⊢ CompactSpace ↑(↑↑U ∩ ↑↑V)
state_after: no goals

tactic: introv H h₁ h₂
state_before: case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
⊢ (∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)) →
    ∀ {U₁ U₂ : Scheme} (f₁ : U₁ ⟶ X) (f₂ : U₂ ⟶ X) [inst : IsAffine U₁] [inst_1 : IsAffine U₂]
      [inst_2 : IsOpenImmersion f₁] [inst_3 : IsOpenImmersion f₂],
      QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
state_after: case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)
U₁ U₂ : Scheme
f₁ : U₁ ⟶ X
f₂ : U₂ ⟶ X
inst✝¹ : IsAffine U₁
inst✝ : IsAffine U₂
h₁ : IsOpenImmersion f₁
h₂ : IsOpenImmersion f₂
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)

tactic: let g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
state_before: case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)
U₁ U₂ : Scheme
f₁ : U₁ ⟶ X
f₂ : U₂ ⟶ X
inst✝¹ : IsAffine U₁
inst✝ : IsAffine U₂
h₁ : IsOpenImmersion f₁
h₂ : IsOpenImmersion f₂
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
state_after: case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)
U₁ U₂ : Scheme
f₁ : U₁ ⟶ X
f₂ : U₂ ⟶ X
inst✝¹ : IsAffine U₁
inst✝ : IsAffine U₂
h₁ : IsOpenImmersion f₁
h₂ : IsOpenImmersion f₂
g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)

tactic: have : IsOpenImmersion g := PresheafedSpace.IsOpenImmersion.comp _ _
state_before: case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)
U₁ U₂ : Scheme
f₁ : U₁ ⟶ X
f₂ : U₂ ⟶ X
inst✝¹ : IsAffine U₁
inst✝ : IsAffine U₂
h₁ : IsOpenImmersion f₁
h₂ : IsOpenImmersion f₂
g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
state_after: case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)
U₁ U₂ : Scheme
f₁ : U₁ ⟶ X
f₂ : U₂ ⟶ X
inst✝¹ : IsAffine U₁
inst✝ : IsAffine U₂
h₁ : IsOpenImmersion f₁
h₂ : IsOpenImmersion f₂
g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
this : IsOpenImmersion g
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)

tactic: have e := Homeomorph.ofEmbedding _ this.base_open.toEmbedding
state_before: case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)
U₁ U₂ : Scheme
f₁ : U₁ ⟶ X
f₂ : U₂ ⟶ X
inst✝¹ : IsAffine U₁
inst✝ : IsAffine U₂
h₁ : IsOpenImmersion f₁
h₂ : IsOpenImmersion f₂
g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
this : IsOpenImmersion g
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
state_after: case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)
U₁ U₂ : Scheme
f₁ : U₁ ⟶ X
f₂ : U₂ ⟶ X
inst✝¹ : IsAffine U₁
inst✝ : IsAffine U₂
h₁ : IsOpenImmersion f₁
h₂ : IsOpenImmersion f₂
g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
this : IsOpenImmersion g
e : ↑↑(pullback f₁ f₂).toPresheafedSpace ≃ₜ ↑(Set.range ⇑g.val.base)
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)

tactic: rw [IsOpenImmersion.range_pullback_to_base_of_left] at e
state_before: case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)
U₁ U₂ : Scheme
f₁ : U₁ ⟶ X
f₂ : U₂ ⟶ X
inst✝¹ : IsAffine U₁
inst✝ : IsAffine U₂
h₁ : IsOpenImmersion f₁
h₂ : IsOpenImmersion f₂
g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
this : IsOpenImmersion g
e : ↑↑(pullback f₁ f₂).toPresheafedSpace ≃ₜ ↑(Set.range ⇑g.val.base)
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
state_after: case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)
U₁ U₂ : Scheme
f₁ : U₁ ⟶ X
f₂ : U₂ ⟶ X
inst✝¹ : IsAffine U₁
inst✝ : IsAffine U₂
h₁ : IsOpenImmersion f₁
h₂ : IsOpenImmersion f₂
g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
this : IsOpenImmersion g
e : ↑↑(pullback f₁ f₂).toPresheafedSpace ≃ₜ ↑(Set.range ⇑f₁.val.base ∩ Set.range ⇑f₂.val.base)
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)

tactic: simp_rw [isCompact_iff_compactSpace] at H
state_before: case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑X.affineOpens), IsCompact (↑↑U ∩ ↑↑V)
U₁ U₂ : Scheme
f₁ : U₁ ⟶ X
f₂ : U₂ ⟶ X
inst✝¹ : IsAffine U₁
inst✝ : IsAffine U₂
h₁ : IsOpenImmersion f₁
h₂ : IsOpenImmersion f₂
g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
this : IsOpenImmersion g
e : ↑↑(pullback f₁ f₂).toPresheafedSpace ≃ₜ ↑(Set.range ⇑f₁.val.base ∩ Set.range ⇑f₂.val.base)
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
state_after: case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
U₁ U₂ : Scheme
f₁ : U₁ ⟶ X
f₂ : U₂ ⟶ X
inst✝¹ : IsAffine U₁
inst✝ : IsAffine U₂
h₁ : IsOpenImmersion f₁
h₂ : IsOpenImmersion f₂
g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
this : IsOpenImmersion g
e : ↑↑(pullback f₁ f₂).toPresheafedSpace ≃ₜ ↑(Set.range ⇑f₁.val.base ∩ Set.range ⇑f₂.val.base)
H : ∀ (U V : ↑X.affineOpens), CompactSpace ↑(↑↑U ∩ ↑↑V)
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)

tactic: exact
  @Homeomorph.compactSpace _ _ _ _
    (H ⟨⟨_, h₁.base_open.isOpen_range⟩, isAffineOpen_opensRange _⟩
      ⟨⟨_, h₂.base_open.isOpen_range⟩, isAffineOpen_opensRange _⟩)
    e.symm
state_before: case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
U₁ U₂ : Scheme
f₁ : U₁ ⟶ X
f₂ : U₂ ⟶ X
inst✝¹ : IsAffine U₁
inst✝ : IsAffine U₂
h₁ : IsOpenImmersion f₁
h₂ : IsOpenImmersion f₂
g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
this : IsOpenImmersion g
e : ↑↑(pullback f₁ f₂).toPresheafedSpace ≃ₜ ↑(Set.range ⇑f₁.val.base ∩ Set.range ⇑f₂.val.base)
H : ∀ (U V : ↑X.affineOpens), CompactSpace ↑(↑↑U ∩ ↑↑V)
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
state_after: no goals