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

Proof steps:
state_before: X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : QuasiSeparated (f ≫ g)
⊢ QuasiSeparated f
state_after: X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : QuasiSeparated (f ≫ g)
𝒰 : Y.OpenCover := (Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover
⊢ QuasiSeparated f
tactic: let 𝒰 := (Z.affineCover.pullbackCover g).bind fun x => Scheme.affineCover _
state_before: X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : QuasiSeparated (f ≫ g)
𝒰 : Y.OpenCover := (Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover
⊢ QuasiSeparated f
state_after: X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : QuasiSeparated (f ≫ g)
𝒰 : Y.OpenCover := (Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover
this : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)
⊢ QuasiSeparated f
tactic: have (i) : IsAffine (𝒰.obj i) := by dsimp [𝒰]; infer_instance
state_before: X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : QuasiSeparated (f ≫ g)
𝒰 : Y.OpenCover := (Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover
this : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)
⊢ QuasiSeparated f
state_after: X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : QuasiSeparated (f ≫ g)
𝒰 : Y.OpenCover := (Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover
this : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)
⊢ ∀
    (i :
      (((Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover).pullbackCover
          f).J),
    QuasiSeparatedSpace
      ↑↑((((Z.affineCover.pullbackCover g).bind fun x =>
                      ((Z.affineCover.pullbackCover g).obj x).affineCover).pullbackCover
                  f).obj
              i).toPresheafedSpace
tactic: apply HasAffineProperty.of_openCover
    ((Z.affineCover.pullbackCover g).bind fun x => Scheme.affineCover _)
state_before: X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : QuasiSeparated (f ≫ g)
𝒰 : Y.OpenCover := (Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover
this : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)
⊢ ∀
    (i :
      (((Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover).pullbackCover
          f).J),
    QuasiSeparatedSpace
      ↑↑((((Z.affineCover.pullbackCover g).bind fun x =>
                      ((Z.affineCover.pullbackCover g).obj x).affineCover).pullbackCover
                  f).obj
              i).toPresheafedSpace
state_after: case mk
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : QuasiSeparated (f ≫ g)
𝒰 : Y.OpenCover := (Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover
this : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)
i : (Z.affineCover.pullbackCover g).J
j : ((fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover) i).J
⊢ QuasiSeparatedSpace
    ↑↑((((Z.affineCover.pullbackCover g).bind fun x =>
                    ((Z.affineCover.pullbackCover g).obj x).affineCover).pullbackCover
                f).obj
            ⟨i, j⟩).toPresheafedSpace
tactic: rintro ⟨i, j⟩
state_before: case mk
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : QuasiSeparated (f ≫ g)
𝒰 : Y.OpenCover := (Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover
this : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)
i : (Z.affineCover.pullbackCover g).J
j : ((fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover) i).J
⊢ QuasiSeparatedSpace
    ↑↑((((Z.affineCover.pullbackCover g).bind fun x =>
                    ((Z.affineCover.pullbackCover g).obj x).affineCover).pullbackCover
                f).obj
            ⟨i, j⟩).toPresheafedSpace
state_after: case mk
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : QuasiSeparated (f ≫ g)
𝒰 : Y.OpenCover := (Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover
this : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)
i : Z.affineCover.J
j : (pullback g (Z.affineCover.map i)).affineCover.J
⊢ QuasiSeparatedSpace
    ↑↑((((Z.affineCover.pullbackCover g).bind fun x =>
                    ((Z.affineCover.pullbackCover g).obj x).affineCover).pullbackCover
                f).obj
            ⟨i, j⟩).toPresheafedSpace
tactic: dsimp at i j
state_before: case mk
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : QuasiSeparated (f ≫ g)
𝒰 : Y.OpenCover := (Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover
this : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)
i : Z.affineCover.J
j : (pullback g (Z.affineCover.map i)).affineCover.J
⊢ QuasiSeparatedSpace
    ↑↑((((Z.affineCover.pullbackCover g).bind fun x =>
                    ((Z.affineCover.pullbackCover g).obj x).affineCover).pullbackCover
                f).obj
            ⟨i, j⟩).toPresheafedSpace
state_after: case mk.refine_1
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : QuasiSeparated (f ≫ g)
𝒰 : Y.OpenCover := (Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover
this : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)
i : Z.affineCover.J
j : (pullback g (Z.affineCover.map i)).affineCover.J
⊢ (((Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover).pullbackCover
          f).obj
      ⟨i, j⟩ ⟶
    pullback (f ≫ g) (Z.affineCover.map i)

case mk.refine_2
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : QuasiSeparated (f ≫ g)
𝒰 : Y.OpenCover := (Z.affineCover.pullbackCover g).bind fun x => ((Z.affineCover.pullbackCover g).obj x).affineCover
this : ∀ (i : 𝒰.J), IsAffine (𝒰.obj i)
i : Z.affineCover.J
j : (pullback g (Z.affineCover.map i)).affineCover.J
⊢ QuasiSeparated ?mk.refine_1
tactic: refine @quasiSeparatedSpace_of_quasiSeparated _ _ ?_
    (HasAffineProperty.of_isPullback (.of_hasPullback _ (Z.affineCover.map i)) ‹_›) ?_