[GOAL]
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
⊢ QuasiSeparatedSpace ↑↑X.toPresheafedSpace ↔ ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
rw [QuasiSeparatedSpace_iff]
[GOAL]
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
⊢ (∀ (U V : Set ↑↑X.toPresheafedSpace), IsOpen U → IsCompact U → IsOpen V → IsCompact V → IsCompact (U ∩ V)) ↔
    ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
constructor
[GOAL]
case mp
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
⊢ (∀ (U V : Set ↑↑X.toPresheafedSpace), IsOpen U → IsCompact U → IsOpen V → IsCompact V → IsCompact (U ∩ V)) →
    ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
intro H U V
[GOAL]
case mp
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : Set ↑↑X.toPresheafedSpace), IsOpen U → IsCompact U → IsOpen V → IsCompact V → IsCompact (U ∩ V)
U V : ↑(Scheme.affineOpens X)
⊢ IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
exact H U V U.1.2 U.2.isCompact V.1.2 V.2.isCompact
[GOAL]
case mpr
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
⊢ (∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)) →
    ∀ (U V : Set ↑↑X.toPresheafedSpace), IsOpen U → IsCompact U → IsOpen V → IsCompact V → IsCompact (U ∩ V)
[PROOFSTEP]
intro H
[GOAL]
case mpr
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
⊢ ∀ (U V : Set ↑↑X.toPresheafedSpace), IsOpen U → IsCompact U → IsOpen V → IsCompact V → IsCompact (U ∩ V)
[PROOFSTEP]
suffices ∀ (U : Opens X.carrier) (_ : IsCompact U.1) (V : Opens X.carrier) (_ : IsCompact V.1), IsCompact (U ⊓ V).1 by
  intro U V hU hU' hV hV'; exact this ⟨U, hU⟩ hU' ⟨V, hV⟩ hV'
[GOAL]
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
this :
  ∀ (U : Opens ↑↑X.toPresheafedSpace),
    IsCompact U.carrier → ∀ (V : Opens ↑↑X.toPresheafedSpace), IsCompact V.carrier → IsCompact (U ⊓ V).carrier
⊢ ∀ (U V : Set ↑↑X.toPresheafedSpace), IsOpen U → IsCompact U → IsOpen V → IsCompact V → IsCompact (U ∩ V)
[PROOFSTEP]
intro U V hU hU' hV hV'
[GOAL]
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
this :
  ∀ (U : Opens ↑↑X.toPresheafedSpace),
    IsCompact U.carrier → ∀ (V : Opens ↑↑X.toPresheafedSpace), IsCompact V.carrier → IsCompact (U ⊓ V).carrier
U V : Set ↑↑X.toPresheafedSpace
hU : IsOpen U
hU' : IsCompact U
hV : IsOpen V
hV' : IsCompact V
⊢ IsCompact (U ∩ V)
[PROOFSTEP]
exact this ⟨U, hU⟩ hU' ⟨V, hV⟩ hV'
[GOAL]
case mpr
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
⊢ ∀ (U : Opens ↑↑X.toPresheafedSpace),
    IsCompact U.carrier → ∀ (V : Opens ↑↑X.toPresheafedSpace), IsCompact V.carrier → IsCompact (U ⊓ V).carrier
[PROOFSTEP]
intro U hU V hV
[GOAL]
case mpr
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V : Opens ↑↑X.toPresheafedSpace
hV : IsCompact V.carrier
⊢ IsCompact (U ⊓ V).carrier
[PROOFSTEP]
apply compact_open_induction_on (P := _) V hV
[GOAL]
case mpr.h₁
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V : Opens ↑↑X.toPresheafedSpace
hV : IsCompact V.carrier
⊢ IsCompact (U ⊓ ⊥).carrier
[PROOFSTEP]
simp
[GOAL]
case mpr.h₂
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V : Opens ↑↑X.toPresheafedSpace
hV : IsCompact V.carrier
⊢ ∀ (S : Opens ↑↑X.toPresheafedSpace),
    IsCompact S.carrier →
      ∀ (U_1 : ↑(Scheme.affineOpens X)), IsCompact (U ⊓ S).carrier → IsCompact (U ⊓ (S ⊔ ↑U_1)).carrier
[PROOFSTEP]
intro S _ V hV
[GOAL]
case mpr.h₂
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V✝ : Opens ↑↑X.toPresheafedSpace
hV✝ : IsCompact V✝.carrier
S : Opens ↑↑X.toPresheafedSpace
x✝ : IsCompact S.carrier
V : ↑(Scheme.affineOpens X)
hV : IsCompact (U ⊓ S).carrier
⊢ IsCompact (U ⊓ (S ⊔ ↑V)).carrier
[PROOFSTEP]
change IsCompact (U.1 ∩ (S.1 ∪ V.1))
[GOAL]
case mpr.h₂
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V✝ : Opens ↑↑X.toPresheafedSpace
hV✝ : IsCompact V✝.carrier
S : Opens ↑↑X.toPresheafedSpace
x✝ : IsCompact S.carrier
V : ↑(Scheme.affineOpens X)
hV : IsCompact (U ⊓ S).carrier
⊢ IsCompact (U.carrier ∩ (S.carrier ∪ ↑↑V))
[PROOFSTEP]
rw [Set.inter_union_distrib_left]
[GOAL]
case mpr.h₂
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V✝ : Opens ↑↑X.toPresheafedSpace
hV✝ : IsCompact V✝.carrier
S : Opens ↑↑X.toPresheafedSpace
x✝ : IsCompact S.carrier
V : ↑(Scheme.affineOpens X)
hV : IsCompact (U ⊓ S).carrier
⊢ IsCompact (U.carrier ∩ S.carrier ∪ U.carrier ∩ ↑↑V)
[PROOFSTEP]
apply hV.union
[GOAL]
case mpr.h₂
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V✝ : Opens ↑↑X.toPresheafedSpace
hV✝ : IsCompact V✝.carrier
S : Opens ↑↑X.toPresheafedSpace
x✝ : IsCompact S.carrier
V : ↑(Scheme.affineOpens X)
hV : IsCompact (U ⊓ S).carrier
⊢ IsCompact (U.carrier ∩ ↑↑V)
[PROOFSTEP]
clear hV
[GOAL]
case mpr.h₂
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V✝ : Opens ↑↑X.toPresheafedSpace
hV : IsCompact V✝.carrier
S : Opens ↑↑X.toPresheafedSpace
x✝ : IsCompact S.carrier
V : ↑(Scheme.affineOpens X)
⊢ IsCompact (U.carrier ∩ ↑↑V)
[PROOFSTEP]
apply compact_open_induction_on (P := _) U hU
[GOAL]
case mpr.h₂.h₁
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V✝ : Opens ↑↑X.toPresheafedSpace
hV : IsCompact V✝.carrier
S : Opens ↑↑X.toPresheafedSpace
x✝ : IsCompact S.carrier
V : ↑(Scheme.affineOpens X)
⊢ IsCompact (⊥.carrier ∩ ↑↑V)
[PROOFSTEP]
simp
[GOAL]
case mpr.h₂.h₂
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V✝ : Opens ↑↑X.toPresheafedSpace
hV : IsCompact V✝.carrier
S : Opens ↑↑X.toPresheafedSpace
x✝ : IsCompact S.carrier
V : ↑(Scheme.affineOpens X)
⊢ ∀ (S : Opens ↑↑X.toPresheafedSpace),
    IsCompact S.carrier →
      ∀ (U : ↑(Scheme.affineOpens X)), IsCompact (S.carrier ∩ ↑↑V) → IsCompact ((S ⊔ ↑U).carrier ∩ ↑↑V)
[PROOFSTEP]
intro S _ W hW
[GOAL]
case mpr.h₂.h₂
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V✝ : Opens ↑↑X.toPresheafedSpace
hV : IsCompact V✝.carrier
S✝ : Opens ↑↑X.toPresheafedSpace
x✝¹ : IsCompact S✝.carrier
V : ↑(Scheme.affineOpens X)
S : Opens ↑↑X.toPresheafedSpace
x✝ : IsCompact S.carrier
W : ↑(Scheme.affineOpens X)
hW : IsCompact (S.carrier ∩ ↑↑V)
⊢ IsCompact ((S ⊔ ↑W).carrier ∩ ↑↑V)
[PROOFSTEP]
change IsCompact ((S.1 ∪ W.1) ∩ V.1)
[GOAL]
case mpr.h₂.h₂
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V✝ : Opens ↑↑X.toPresheafedSpace
hV : IsCompact V✝.carrier
S✝ : Opens ↑↑X.toPresheafedSpace
x✝¹ : IsCompact S✝.carrier
V : ↑(Scheme.affineOpens X)
S : Opens ↑↑X.toPresheafedSpace
x✝ : IsCompact S.carrier
W : ↑(Scheme.affineOpens X)
hW : IsCompact (S.carrier ∩ ↑↑V)
⊢ IsCompact ((S.carrier ∪ ↑↑W) ∩ ↑↑V)
[PROOFSTEP]
rw [Set.union_inter_distrib_right]
[GOAL]
case mpr.h₂.h₂
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V✝ : Opens ↑↑X.toPresheafedSpace
hV : IsCompact V✝.carrier
S✝ : Opens ↑↑X.toPresheafedSpace
x✝¹ : IsCompact S✝.carrier
V : ↑(Scheme.affineOpens X)
S : Opens ↑↑X.toPresheafedSpace
x✝ : IsCompact S.carrier
W : ↑(Scheme.affineOpens X)
hW : IsCompact (S.carrier ∩ ↑↑V)
⊢ IsCompact (S.carrier ∩ ↑↑V ∪ ↑↑W ∩ ↑↑V)
[PROOFSTEP]
apply hW.union
[GOAL]
case mpr.h₂.h₂
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
H : ∀ (U V : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
V✝ : Opens ↑↑X.toPresheafedSpace
hV : IsCompact V✝.carrier
S✝ : Opens ↑↑X.toPresheafedSpace
x✝¹ : IsCompact S✝.carrier
V : ↑(Scheme.affineOpens X)
S : Opens ↑↑X.toPresheafedSpace
x✝ : IsCompact S.carrier
W : ↑(Scheme.affineOpens X)
hW : IsCompact (S.carrier ∩ ↑↑V)
⊢ IsCompact (↑↑W ∩ ↑↑V)
[PROOFSTEP]
apply H
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
⊢ AffineTargetMorphismProperty.diagonal QuasiCompact.affineProperty f ↔ QuasiSeparatedSpace ↑↑X.toPresheafedSpace
[PROOFSTEP]
delta AffineTargetMorphismProperty.diagonal
[GOAL]
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
[PROOFSTEP]
rw [quasiSeparatedSpace_iff_affine]
[GOAL]
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 : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
constructor
[GOAL]
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 : ↑(Scheme.affineOpens X)), IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
intro H U V
[GOAL]
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 : ↑(Scheme.affineOpens X)
⊢ IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
haveI : IsAffine _ := U.2
[GOAL]
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 : ↑(Scheme.affineOpens X)
this : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
⊢ IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
haveI : IsAffine _ := V.2
[GOAL]
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 : ↑(Scheme.affineOpens X)
this✝ : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
this : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V)))
⊢ IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
let g : pullback (X.ofRestrict U.1.openEmbedding) (X.ofRestrict V.1.openEmbedding) ⟶ X :=
  pullback.fst ≫
    X.ofRestrict
      _
        -- Porting note: `inferInstance` does not work here
[GOAL]
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 : ↑(Scheme.affineOpens X)
this✝ : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
this : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V)))
g : pullback (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
    (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V))) ⟶
  X :=
  pullback.fst ≫ Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U))
⊢ IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
have : IsOpenImmersion g := PresheafedSpace.IsOpenImmersion.comp _ _
[GOAL]
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 : ↑(Scheme.affineOpens X)
this✝¹ : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
this✝ : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V)))
g : pullback (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
    (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V))) ⟶
  X :=
  pullback.fst ≫ Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U))
this : IsOpenImmersion g
⊢ IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
have e := Homeomorph.ofEmbedding _ this.base_open.toEmbedding
[GOAL]
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 : ↑(Scheme.affineOpens X)
this✝¹ : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
this✝ : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V)))
g : pullback (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
    (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V))) ⟶
  X :=
  pullback.fst ≫ Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U))
this : IsOpenImmersion g
e :
  (forget TopCat).obj
      ↑(pullback (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
                (Scheme.ofRestrict X
                  (_ : OpenEmbedding ↑(Opens.inclusion ↑V)))).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace ≃ₜ
    ↑(Set.range ↑g.val.base)
⊢ IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
rw [IsOpenImmersion.range_pullback_to_base_of_left] at e
[GOAL]
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 : ↑(Scheme.affineOpens X)
this✝¹ : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
this✝ : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V)))
g : pullback (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
    (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V))) ⟶
  X :=
  pullback.fst ≫ Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U))
this : IsOpenImmersion g
e :
  (forget TopCat).obj
      ↑(pullback (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
                (Scheme.ofRestrict X
                  (_ : OpenEmbedding ↑(Opens.inclusion ↑V)))).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace ≃ₜ
    ↑(Set.range ↑(Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U))).val.base ∩
        Set.range ↑(Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V))).val.base)
⊢ IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
erw [Subtype.range_coe, Subtype.range_coe] at e
[GOAL]
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 : ↑(Scheme.affineOpens X)
this✝¹ : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
this✝ : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V)))
g : pullback (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
    (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V))) ⟶
  X :=
  pullback.fst ≫ Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U))
this : IsOpenImmersion g
e :
  (forget TopCat).obj
      ↑(pullback (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
                (Scheme.ofRestrict X
                  (_ : OpenEmbedding ↑(Opens.inclusion ↑V)))).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace ≃ₜ
    ↑(↑↑U ∩ ↑↑V)
⊢ IsCompact (↑↑U ∩ ↑↑V)
[PROOFSTEP]
rw [isCompact_iff_compactSpace]
[GOAL]
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 : ↑(Scheme.affineOpens X)
this✝¹ : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
this✝ : IsAffine (Scheme.restrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V)))
g : pullback (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
    (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑V))) ⟶
  X :=
  pullback.fst ≫ Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U))
this : IsOpenImmersion g
e :
  (forget TopCat).obj
      ↑(pullback (Scheme.ofRestrict X (_ : OpenEmbedding ↑(Opens.inclusion ↑U)))
                (Scheme.ofRestrict X
                  (_ : OpenEmbedding ↑(Opens.inclusion ↑V)))).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace ≃ₜ
    ↑(↑↑U ∩ ↑↑V)
⊢ CompactSpace ↑(↑↑U ∩ ↑↑V)
[PROOFSTEP]
exact @Homeomorph.compactSpace _ _ _ _ (H _ _) e
[GOAL]
case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝ : IsAffine Y
f : X ⟶ Y
⊢ (∀ (U V : ↑(Scheme.affineOpens X)), 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)
[PROOFSTEP]
introv H h₁ h₂
[GOAL]
case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑(Scheme.affineOpens X)), 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)
[PROOFSTEP]
let g : pullback f₁ f₂ ⟶ X := pullback.fst ≫ f₁
[GOAL]
case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑(Scheme.affineOpens X)), 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)
[PROOFSTEP]
have : IsOpenImmersion g := PresheafedSpace.IsOpenImmersion.comp _ _
[GOAL]
case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑(Scheme.affineOpens X)), 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)
[PROOFSTEP]
have e := Homeomorph.ofEmbedding _ this.base_open.toEmbedding
[GOAL]
case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑(Scheme.affineOpens X)), 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 :
  (forget TopCat).obj ↑(pullback f₁ f₂).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace ≃ₜ
    ↑(Set.range ↑g.val.base)
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
[PROOFSTEP]
rw [IsOpenImmersion.range_pullback_to_base_of_left] at e
[GOAL]
case mpr
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
inst✝² : IsAffine Y
f : X ⟶ Y
H : ∀ (U V : ↑(Scheme.affineOpens X)), 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 :
  (forget TopCat).obj ↑(pullback f₁ f₂).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace ≃ₜ
    ↑(Set.range ↑f₁.val.base ∩ Set.range ↑f₂.val.base)
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
[PROOFSTEP]
simp_rw [isCompact_iff_compactSpace] at H
[GOAL]
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 :
  (forget TopCat).obj ↑(pullback f₁ f₂).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace ≃ₜ
    ↑(Set.range ↑f₁.val.base ∩ Set.range ↑f₂.val.base)
H : ∀ (U V : ↑(Scheme.affineOpens X)), CompactSpace ↑(↑↑U ∩ ↑↑V)
⊢ QuasiCompact.affineProperty (pullback.mapDesc f₁ f₂ f)
[PROOFSTEP]
exact
  @Homeomorph.compactSpace _ _ _ _
    (H ⟨⟨_, h₁.base_open.open_range⟩, rangeIsAffineOpenOfOpenImmersion _⟩
      ⟨⟨_, h₂.base_open.open_range⟩, rangeIsAffineOpenOfOpenImmersion _⟩)
    e.symm
[GOAL]
X Y : Scheme
f : X ⟶ Y
⊢ @QuasiSeparated = MorphismProperty.diagonal @QuasiCompact
[PROOFSTEP]
ext
[GOAL]
case h.h.h.a
X Y : Scheme
f : X ⟶ Y
x✝² x✝¹ : Scheme
x✝ : x✝² ⟶ x✝¹
⊢ QuasiSeparated x✝ ↔ MorphismProperty.diagonal (@QuasiCompact) x✝
[PROOFSTEP]
exact QuasiSeparated_iff _
[GOAL]
X Y : Scheme
f : X ⟶ Y
⊢ AffineTargetMorphismProperty.diagonal QuasiCompact.affineProperty = QuasiSeparated.affineProperty
[PROOFSTEP]
funext
[GOAL]
case h.h.h.h
X Y : Scheme
f : X ⟶ Y
x✝³ x✝² : Scheme
x✝¹ : x✝³ ⟶ x✝²
x✝ : IsAffine x✝²
⊢ AffineTargetMorphismProperty.diagonal QuasiCompact.affineProperty x✝¹ = QuasiSeparated.affineProperty x✝¹
[PROOFSTEP]
rw [quasi_compact_affineProperty_iff_quasiSeparatedSpace]
[GOAL]
case h.h.h.h
X Y : Scheme
f : X ⟶ Y
x✝³ x✝² : Scheme
x✝¹ : x✝³ ⟶ x✝²
x✝ : IsAffine x✝²
⊢ QuasiSeparatedSpace ↑↑x✝³.toPresheafedSpace = QuasiSeparated.affineProperty x✝¹
[PROOFSTEP]
rfl
[GOAL]
X Y : Scheme
f : X ⟶ Y
⊢ @QuasiSeparated = targetAffineLocally (AffineTargetMorphismProperty.diagonal QuasiCompact.affineProperty)
[PROOFSTEP]
rw [quasiSeparated_eq_diagonal_is_quasiCompact, quasiCompact_eq_affineProperty]
[GOAL]
X Y : Scheme
f : X ⟶ Y
⊢ MorphismProperty.diagonal (targetAffineLocally QuasiCompact.affineProperty) =
    targetAffineLocally (AffineTargetMorphismProperty.diagonal QuasiCompact.affineProperty)
[PROOFSTEP]
exact diagonal_targetAffineLocally_eq_targetAffineLocally _ QuasiCompact.affineProperty_isLocal
[GOAL]
X Y : Scheme
f : X ⟶ Y
⊢ @QuasiSeparated = targetAffineLocally QuasiSeparated.affineProperty
[PROOFSTEP]
rw [quasiSeparated_eq_affineProperty_diagonal, quasi_compact_affineProperty_diagonal_eq]
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
f : X ⟶ Y
⊢ TFAE
    [QuasiSeparated f,
      ∃ 𝒰 x,
        ∀ (i : 𝒰.J),
          QuasiSeparatedSpace
            ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace,
      ∀ (𝒰 : Scheme.OpenCover Y) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
        QuasiSeparatedSpace
          ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace,
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst : IsOpenImmersion g],
        QuasiSeparatedSpace ↑↑(pullback f g).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace,
      ∃ 𝒰 x 𝒰' x,
        ∀ (i : 𝒰.J) (j k : (𝒰' i).J),
          CompactSpace
            ↑↑(pullback (Scheme.OpenCover.map (𝒰' i) j)
                        (Scheme.OpenCover.map (𝒰' i) k)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace]
[PROOFSTEP]
have := QuasiCompact.affineProperty_isLocal.diagonal_affine_openCover_TFAE f
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
f : X ⟶ Y
this :
  TFAE
    [MorphismProperty.diagonal (targetAffineLocally QuasiCompact.affineProperty) f,
      ∃ 𝒰 x, ∀ (i : 𝒰.J), AffineTargetMorphismProperty.diagonal QuasiCompact.affineProperty pullback.snd,
      ∀ (𝒰 : Scheme.OpenCover Y) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
        AffineTargetMorphismProperty.diagonal QuasiCompact.affineProperty pullback.snd,
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g],
        AffineTargetMorphismProperty.diagonal QuasiCompact.affineProperty pullback.snd,
      ∃ 𝒰 x 𝒰' x_1,
        ∀ (i : 𝒰.J) (j k : (𝒰' i).J),
          QuasiCompact.affineProperty
            (pullback.mapDesc (Scheme.OpenCover.map (𝒰' i) j) (Scheme.OpenCover.map (𝒰' i) k) pullback.snd)]
⊢ TFAE
    [QuasiSeparated f,
      ∃ 𝒰 x,
        ∀ (i : 𝒰.J),
          QuasiSeparatedSpace
            ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace,
      ∀ (𝒰 : Scheme.OpenCover Y) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
        QuasiSeparatedSpace
          ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace,
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst : IsOpenImmersion g],
        QuasiSeparatedSpace ↑↑(pullback f g).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace,
      ∃ 𝒰 x 𝒰' x,
        ∀ (i : 𝒰.J) (j k : (𝒰' i).J),
          CompactSpace
            ↑↑(pullback (Scheme.OpenCover.map (𝒰' i) j)
                        (Scheme.OpenCover.map (𝒰' i) k)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace]
[PROOFSTEP]
simp_rw [← quasiCompact_eq_affineProperty, ← quasiSeparated_eq_diagonal_is_quasiCompact,
  quasi_compact_affineProperty_diagonal_eq] at this
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
f : X ⟶ Y
this :
  TFAE
    [QuasiSeparated f, ∃ 𝒰 h, ∀ (i : 𝒰.J), affineProperty pullback.snd,
      ∀ (𝒰 : Scheme.OpenCover Y) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
        affineProperty pullback.snd,
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst_1 : IsOpenImmersion g], affineProperty pullback.snd,
      ∃ 𝒰 x 𝒰' x_1,
        ∀ (i : 𝒰.J) (j k : (𝒰' i).J),
          QuasiCompact.affineProperty
            (pullback.mapDesc (Scheme.OpenCover.map (𝒰' i) j) (Scheme.OpenCover.map (𝒰' i) k) pullback.snd)]
⊢ TFAE
    [QuasiSeparated f,
      ∃ 𝒰 x,
        ∀ (i : 𝒰.J),
          QuasiSeparatedSpace
            ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace,
      ∀ (𝒰 : Scheme.OpenCover Y) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
        QuasiSeparatedSpace
          ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace,
      ∀ {U : Scheme} (g : U ⟶ Y) [inst : IsAffine U] [inst : IsOpenImmersion g],
        QuasiSeparatedSpace ↑↑(pullback f g).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace,
      ∃ 𝒰 x 𝒰' x,
        ∀ (i : 𝒰.J) (j k : (𝒰' i).J),
          CompactSpace
            ↑↑(pullback (Scheme.OpenCover.map (𝒰' i) j)
                        (Scheme.OpenCover.map (𝒰' i) k)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace]
[PROOFSTEP]
exact this
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
f : X ⟶ Y
inst✝ : IsAffine Y
⊢ QuasiSeparated f ↔ QuasiSeparatedSpace ↑↑X.toPresheafedSpace
[PROOFSTEP]
rw [quasiSeparated_eq_affineProperty, QuasiSeparated.affineProperty_isLocal.affine_target_iff f,
  QuasiSeparated.affineProperty]
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
𝒰 : Scheme.OpenCover Y
inst✝ : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)
f : X ⟶ Y
⊢ QuasiSeparated f ↔
    ∀ (i : 𝒰.J),
      QuasiSeparatedSpace
        ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
[PROOFSTEP]
rw [quasiSeparated_eq_affineProperty, QuasiSeparated.affineProperty_isLocal.affine_openCover_iff f 𝒰]
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
𝒰 : Scheme.OpenCover Y
inst✝ : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)
f : X ⟶ Y
⊢ (∀ (i : 𝒰.J), affineProperty pullback.snd) ↔
    ∀ (i : 𝒰.J),
      QuasiSeparatedSpace
        ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
[PROOFSTEP]
rfl
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
f : X ⟶ Y
hY : QuasiSeparatedSpace ↑↑Y.toPresheafedSpace
inst✝ : QuasiSeparated f
⊢ QuasiSeparatedSpace ↑↑X.toPresheafedSpace
[PROOFSTEP]
rw [quasiSeparatedSpace_iff_quasiSeparated] at hY ⊢
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
f : X ⟶ Y
hY : QuasiSeparated (terminal.from Y)
inst✝ : QuasiSeparated f
⊢ QuasiSeparated (terminal.from X)
[PROOFSTEP]
have : f ≫ terminal.from Y = terminal.from X := terminalIsTerminal.hom_ext _ _
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
f : X ⟶ Y
hY : QuasiSeparated (terminal.from Y)
inst✝ : QuasiSeparated f
this : f ≫ terminal.from Y = terminal.from X
⊢ QuasiSeparated (terminal.from X)
[PROOFSTEP]
rw [← this]
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y : Scheme
f : X ⟶ Y
hY : QuasiSeparated (terminal.from Y)
inst✝ : QuasiSeparated f
this : f ≫ terminal.from Y = terminal.from X
⊢ QuasiSeparated (f ≫ terminal.from Y)
[PROOFSTEP]
infer_instance
[GOAL]
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
inst✝ : IsAffine X
⊢ QuasiSeparatedSpace ↑↑X.toPresheafedSpace
[PROOFSTEP]
constructor
[GOAL]
case inter_isCompact
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
inst✝ : IsAffine X
⊢ ∀ (U V : Set ↑↑X.toPresheafedSpace), IsOpen U → IsCompact U → IsOpen V → IsCompact V → IsCompact (U ∩ V)
[PROOFSTEP]
intro U V hU hU' hV hV'
[GOAL]
case inter_isCompact
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
inst✝ : IsAffine X
U V : Set ↑↑X.toPresheafedSpace
hU : IsOpen U
hU' : IsCompact U
hV : IsOpen V
hV' : IsCompact V
⊢ IsCompact (U ∩ V)
[PROOFSTEP]
obtain ⟨s, hs, e⟩ := (isCompact_open_iff_eq_basicOpen_union _).mp ⟨hU', hU⟩
[GOAL]
case inter_isCompact.intro.intro
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
inst✝ : IsAffine X
U V : Set ↑↑X.toPresheafedSpace
hU : IsOpen U
hU' : IsCompact U
hV : IsOpen V
hV' : IsCompact V
s : Set ↑(X.presheaf.obj (op ⊤))
hs : Set.Finite s
e : U = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s), ↑(Scheme.basicOpen X i)
⊢ IsCompact (U ∩ V)
[PROOFSTEP]
obtain ⟨s', hs', e'⟩ := (isCompact_open_iff_eq_basicOpen_union _).mp ⟨hV', hV⟩
[GOAL]
case inter_isCompact.intro.intro.intro.intro
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
inst✝ : IsAffine X
U V : Set ↑↑X.toPresheafedSpace
hU : IsOpen U
hU' : IsCompact U
hV : IsOpen V
hV' : IsCompact V
s : Set ↑(X.presheaf.obj (op ⊤))
hs : Set.Finite s
e : U = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s), ↑(Scheme.basicOpen X i)
s' : Set ↑(X.presheaf.obj (op ⊤))
hs' : Set.Finite s'
e' : V = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s'), ↑(Scheme.basicOpen X i)
⊢ IsCompact (U ∩ V)
[PROOFSTEP]
rw [e, e', Set.iUnion₂_inter]
[GOAL]
case inter_isCompact.intro.intro.intro.intro
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
inst✝ : IsAffine X
U V : Set ↑↑X.toPresheafedSpace
hU : IsOpen U
hU' : IsCompact U
hV : IsOpen V
hV' : IsCompact V
s : Set ↑(X.presheaf.obj (op ⊤))
hs : Set.Finite s
e : U = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s), ↑(Scheme.basicOpen X i)
s' : Set ↑(X.presheaf.obj (op ⊤))
hs' : Set.Finite s'
e' : V = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s'), ↑(Scheme.basicOpen X i)
⊢ IsCompact
    (⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s),
      ↑(Scheme.basicOpen X i) ∩ ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s'), ↑(Scheme.basicOpen X i))
[PROOFSTEP]
simp_rw [Set.inter_iUnion₂]
[GOAL]
case inter_isCompact.intro.intro.intro.intro
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
inst✝ : IsAffine X
U V : Set ↑↑X.toPresheafedSpace
hU : IsOpen U
hU' : IsCompact U
hV : IsOpen V
hV' : IsCompact V
s : Set ↑(X.presheaf.obj (op ⊤))
hs : Set.Finite s
e : U = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s), ↑(Scheme.basicOpen X i)
s' : Set ↑(X.presheaf.obj (op ⊤))
hs' : Set.Finite s'
e' : V = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s'), ↑(Scheme.basicOpen X i)
⊢ IsCompact
    (⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s) (i_1 : ↑(X.presheaf.obj (op ⊤))) (_ : i_1 ∈ s'),
      ↑(Scheme.basicOpen X i) ∩ ↑(Scheme.basicOpen X i_1))
[PROOFSTEP]
apply hs.isCompact_biUnion
[GOAL]
case inter_isCompact.intro.intro.intro.intro
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
inst✝ : IsAffine X
U V : Set ↑↑X.toPresheafedSpace
hU : IsOpen U
hU' : IsCompact U
hV : IsOpen V
hV' : IsCompact V
s : Set ↑(X.presheaf.obj (op ⊤))
hs : Set.Finite s
e : U = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s), ↑(Scheme.basicOpen X i)
s' : Set ↑(X.presheaf.obj (op ⊤))
hs' : Set.Finite s'
e' : V = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s'), ↑(Scheme.basicOpen X i)
⊢ ∀ (i : ↑(X.presheaf.obj (op ⊤))),
    i ∈ s →
      IsCompact (⋃ (i_1 : ↑(X.presheaf.obj (op ⊤))) (_ : i_1 ∈ s'), ↑(Scheme.basicOpen X i) ∩ ↑(Scheme.basicOpen X i_1))
[PROOFSTEP]
intro i _
[GOAL]
case inter_isCompact.intro.intro.intro.intro
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
inst✝ : IsAffine X
U V : Set ↑↑X.toPresheafedSpace
hU : IsOpen U
hU' : IsCompact U
hV : IsOpen V
hV' : IsCompact V
s : Set ↑(X.presheaf.obj (op ⊤))
hs : Set.Finite s
e : U = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s), ↑(Scheme.basicOpen X i)
s' : Set ↑(X.presheaf.obj (op ⊤))
hs' : Set.Finite s'
e' : V = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s'), ↑(Scheme.basicOpen X i)
i : ↑(X.presheaf.obj (op ⊤))
a✝ : i ∈ s
⊢ IsCompact (⋃ (i_1 : ↑(X.presheaf.obj (op ⊤))) (_ : i_1 ∈ s'), ↑(Scheme.basicOpen X i) ∩ ↑(Scheme.basicOpen X i_1))
[PROOFSTEP]
apply hs'.isCompact_biUnion
[GOAL]
case inter_isCompact.intro.intro.intro.intro
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
inst✝ : IsAffine X
U V : Set ↑↑X.toPresheafedSpace
hU : IsOpen U
hU' : IsCompact U
hV : IsOpen V
hV' : IsCompact V
s : Set ↑(X.presheaf.obj (op ⊤))
hs : Set.Finite s
e : U = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s), ↑(Scheme.basicOpen X i)
s' : Set ↑(X.presheaf.obj (op ⊤))
hs' : Set.Finite s'
e' : V = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s'), ↑(Scheme.basicOpen X i)
i : ↑(X.presheaf.obj (op ⊤))
a✝ : i ∈ s
⊢ ∀ (i_1 : ↑(X.presheaf.obj (op ⊤))), i_1 ∈ s' → IsCompact (↑(Scheme.basicOpen X i) ∩ ↑(Scheme.basicOpen X i_1))
[PROOFSTEP]
intro i' _
[GOAL]
case inter_isCompact.intro.intro.intro.intro
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
inst✝ : IsAffine X
U V : Set ↑↑X.toPresheafedSpace
hU : IsOpen U
hU' : IsCompact U
hV : IsOpen V
hV' : IsCompact V
s : Set ↑(X.presheaf.obj (op ⊤))
hs : Set.Finite s
e : U = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s), ↑(Scheme.basicOpen X i)
s' : Set ↑(X.presheaf.obj (op ⊤))
hs' : Set.Finite s'
e' : V = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s'), ↑(Scheme.basicOpen X i)
i : ↑(X.presheaf.obj (op ⊤))
a✝¹ : i ∈ s
i' : ↑(X.presheaf.obj (op ⊤))
a✝ : i' ∈ s'
⊢ IsCompact (↑(Scheme.basicOpen X i) ∩ ↑(Scheme.basicOpen X i'))
[PROOFSTEP]
change IsCompact (X.basicOpen i ⊓ X.basicOpen i').1
[GOAL]
case inter_isCompact.intro.intro.intro.intro
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
inst✝ : IsAffine X
U V : Set ↑↑X.toPresheafedSpace
hU : IsOpen U
hU' : IsCompact U
hV : IsOpen V
hV' : IsCompact V
s : Set ↑(X.presheaf.obj (op ⊤))
hs : Set.Finite s
e : U = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s), ↑(Scheme.basicOpen X i)
s' : Set ↑(X.presheaf.obj (op ⊤))
hs' : Set.Finite s'
e' : V = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s'), ↑(Scheme.basicOpen X i)
i : ↑(X.presheaf.obj (op ⊤))
a✝¹ : i ∈ s
i' : ↑(X.presheaf.obj (op ⊤))
a✝ : i' ∈ s'
⊢ IsCompact (Scheme.basicOpen X i ⊓ Scheme.basicOpen X i').carrier
[PROOFSTEP]
rw [← Scheme.basicOpen_mul]
[GOAL]
case inter_isCompact.intro.intro.intro.intro
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
inst✝ : IsAffine X
U V : Set ↑↑X.toPresheafedSpace
hU : IsOpen U
hU' : IsCompact U
hV : IsOpen V
hV' : IsCompact V
s : Set ↑(X.presheaf.obj (op ⊤))
hs : Set.Finite s
e : U = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s), ↑(Scheme.basicOpen X i)
s' : Set ↑(X.presheaf.obj (op ⊤))
hs' : Set.Finite s'
e' : V = ⋃ (i : ↑(X.presheaf.obj (op ⊤))) (_ : i ∈ s'), ↑(Scheme.basicOpen X i)
i : ↑(X.presheaf.obj (op ⊤))
a✝¹ : i ∈ s
i' : ↑(X.presheaf.obj (op ⊤))
a✝ : i' ∈ s'
⊢ IsCompact (Scheme.basicOpen X (i * i')).carrier
[PROOFSTEP]
exact ((topIsAffineOpen _).basicOpenIsAffine _).isCompact
[GOAL]
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsAffineOpen U
⊢ IsQuasiSeparated ↑U
[PROOFSTEP]
rw [isQuasiSeparated_iff_quasiSeparatedSpace]
[GOAL]
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsAffineOpen U
⊢ QuasiSeparatedSpace ↑↑U
case hs X✝ Y : Scheme f : X✝ ⟶ Y X : Scheme U : Opens ↑↑X.toPresheafedSpace hU : IsAffineOpen U ⊢ IsOpen ↑U
[PROOFSTEP]
exacts [@AlgebraicGeometry.quasiSeparatedSpace_of_isAffine _ hU, U.isOpen]
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
H : QuasiSeparated (f ≫ g)
⊢ QuasiSeparated f
[PROOFSTEP]
have h01 := (QuasiSeparated.affine_openCover_TFAE f).out 0 1
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
H : QuasiSeparated (f ≫ g)
h01 :
  QuasiSeparated f ↔
    ∃ 𝒰 x,
      ∀ (i : 𝒰.J),
        QuasiSeparatedSpace
          ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
⊢ QuasiSeparated f
[PROOFSTEP]
rw [h01]
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
H : QuasiSeparated (f ≫ g)
h01 :
  QuasiSeparated f ↔
    ∃ 𝒰 x,
      ∀ (i : 𝒰.J),
        QuasiSeparatedSpace
          ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
⊢ ∃ 𝒰 x,
    ∀ (i : 𝒰.J),
      QuasiSeparatedSpace
        ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
[PROOFSTEP]
clear h01
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
H : QuasiSeparated (f ≫ g)
⊢ ∃ 𝒰 x,
    ∀ (i : 𝒰.J),
      QuasiSeparatedSpace
        ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
[PROOFSTEP]
have h02 := (QuasiSeparated.affine_openCover_TFAE (f ≫ g)).out 0 2
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
H : QuasiSeparated (f ≫ g)
h02 :
  QuasiSeparated (f ≫ g) ↔
    ∀ (𝒰 : Scheme.OpenCover Z) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
      QuasiSeparatedSpace
        ↑↑(pullback (f ≫ g) (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
⊢ ∃ 𝒰 x,
    ∀ (i : 𝒰.J),
      QuasiSeparatedSpace
        ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
[PROOFSTEP]
rw [h02] at H
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
H :
  ∀ (𝒰 : Scheme.OpenCover Z) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
    QuasiSeparatedSpace
      ↑↑(pullback (f ≫ g) (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
h02 :
  QuasiSeparated (f ≫ g) ↔
    ∀ (𝒰 : Scheme.OpenCover Z) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
      QuasiSeparatedSpace
        ↑↑(pullback (f ≫ g) (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
⊢ ∃ 𝒰 x,
    ∀ (i : 𝒰.J),
      QuasiSeparatedSpace
        ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
[PROOFSTEP]
clear h02
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
H :
  ∀ (𝒰 : Scheme.OpenCover Z) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
    QuasiSeparatedSpace
      ↑↑(pullback (f ≫ g) (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
⊢ ∃ 𝒰 x,
    ∀ (i : 𝒰.J),
      QuasiSeparatedSpace
        ↑↑(pullback f (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
[PROOFSTEP]
refine
  ⟨(Z.affineCover.pullbackCover g).bind fun x => Scheme.affineCover _, ?_, ?_⟩
    -- constructor
[GOAL]
case refine_1
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
H :
  ∀ (𝒰 : Scheme.OpenCover Z) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
    QuasiSeparatedSpace
      ↑↑(pullback (f ≫ g) (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
⊢ ∀
    (i :
      (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
          Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x)).J),
    IsAffine
      (Scheme.OpenCover.obj
        (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
          Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
        i)
[PROOFSTEP]
intro i
[GOAL]
case refine_1
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
H :
  ∀ (𝒰 : Scheme.OpenCover Z) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
    QuasiSeparatedSpace
      ↑↑(pullback (f ≫ g) (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
i :
  (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
      Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x)).J
⊢ IsAffine
    (Scheme.OpenCover.obj
      (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
        Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
      i)
[PROOFSTEP]
dsimp
[GOAL]
case refine_1
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
H :
  ∀ (𝒰 : Scheme.OpenCover Z) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
    QuasiSeparatedSpace
      ↑↑(pullback (f ≫ g) (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
i :
  (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
      Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x)).J
⊢ IsAffine
    (Scheme.OpenCover.obj (Scheme.affineCover (pullback g (Scheme.OpenCover.map (Scheme.affineCover Z) i.fst))) i.snd)
[PROOFSTEP]
infer_instance
[GOAL]
case refine_2
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
H :
  ∀ (𝒰 : Scheme.OpenCover Z) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
    QuasiSeparatedSpace
      ↑↑(pullback (f ≫ g) (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
⊢ ∀
    (i :
      (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
          Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x)).J),
    QuasiSeparatedSpace
      ↑↑(pullback f
                  (Scheme.OpenCover.map
                    (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
                      Scheme.affineCover
                        (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
                    i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
[PROOFSTEP]
rintro ⟨i, j⟩
[GOAL]
case refine_2.mk
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
H :
  ∀ (𝒰 : Scheme.OpenCover Z) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
    QuasiSeparatedSpace
      ↑↑(pullback (f ≫ g) (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
i : (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g).J
j :
  ((fun x => Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x)) i).J
⊢ QuasiSeparatedSpace
    ↑↑(pullback f
                (Scheme.OpenCover.map
                  (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
                    Scheme.affineCover
                      (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
                  { fst := i, snd := j })).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
[PROOFSTEP]
dsimp at i j
[GOAL]
case refine_2.mk
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
H :
  ∀ (𝒰 : Scheme.OpenCover Z) [inst : ∀ (i : 𝒰.J), IsAffine (Scheme.OpenCover.obj 𝒰 i)] (i : 𝒰.J),
    QuasiSeparatedSpace
      ↑↑(pullback (f ≫ g) (Scheme.OpenCover.map 𝒰 i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
i : (Scheme.affineCover Z).J
j : (Scheme.affineCover (pullback g (Scheme.OpenCover.map (Scheme.affineCover Z) i))).J
⊢ QuasiSeparatedSpace
    ↑↑(pullback f
                (Scheme.OpenCover.map
                  (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
                    Scheme.affineCover
                      (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
                  { fst := i, snd := j })).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
[PROOFSTEP]
specialize H _ i
[GOAL]
case refine_2.mk
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
i : (Scheme.affineCover Z).J
j : (Scheme.affineCover (pullback g (Scheme.OpenCover.map (Scheme.affineCover Z) i))).J
H :
  QuasiSeparatedSpace
    ↑↑(pullback (f ≫ g)
                (Scheme.OpenCover.map (Scheme.affineCover Z) i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
⊢ QuasiSeparatedSpace
    ↑↑(pullback f
                (Scheme.OpenCover.map
                  (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
                    Scheme.affineCover
                      (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
                  { fst := i, snd := j })).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
[PROOFSTEP]
refine @quasiSeparatedSpace_of_quasiSeparated _ _ ?_ H ?_
[GOAL]
case refine_2.mk.refine_1
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
i : (Scheme.affineCover Z).J
j : (Scheme.affineCover (pullback g (Scheme.OpenCover.map (Scheme.affineCover Z) i))).J
H :
  QuasiSeparatedSpace
    ↑↑(pullback (f ≫ g)
                (Scheme.OpenCover.map (Scheme.affineCover Z) i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
⊢ pullback f
      (Scheme.OpenCover.map
        (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
          Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
        { fst := i, snd := j }) ⟶
    pullback (f ≫ g) (Scheme.OpenCover.map (Scheme.affineCover Z) i)
[PROOFSTEP]
exact
  pullback.map _ _ _ _ (𝟙 _) _ _ (by simp) (Category.comp_id _) ≫
    (pullbackRightPullbackFstIso g (Z.affineCover.map i) f).hom
[GOAL]
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
i : (Scheme.affineCover Z).J
j : (Scheme.affineCover (pullback g (Scheme.OpenCover.map (Scheme.affineCover Z) i))).J
H :
  QuasiSeparatedSpace
    ↑↑(pullback (f ≫ g)
                (Scheme.OpenCover.map (Scheme.affineCover Z) i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
⊢ f ≫ 𝟙 Y = 𝟙 X ≫ f
[PROOFSTEP]
simp
[GOAL]
case refine_2.mk.refine_2
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
i : (Scheme.affineCover Z).J
j : (Scheme.affineCover (pullback g (Scheme.OpenCover.map (Scheme.affineCover Z) i))).J
H :
  QuasiSeparatedSpace
    ↑↑(pullback (f ≫ g)
                (Scheme.OpenCover.map (Scheme.affineCover Z) i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
⊢ QuasiSeparated
    (pullback.map f
        (Scheme.OpenCover.map
          (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
            Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
          { fst := i, snd := j })
        f (Scheme.OpenCover.map (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) { fst := i, snd := j }.fst)
        (𝟙 X)
        (Scheme.OpenCover.map
          ((fun x =>
              Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
            { fst := i, snd := j }.fst)
          { fst := i, snd := j }.snd)
        (𝟙 Y) (_ : f ≫ 𝟙 Y = 𝟙 X ≫ f)
        (_ :
          Scheme.OpenCover.map
                (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
                  Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
                { fst := i, snd := j } ≫
              𝟙 Y =
            Scheme.OpenCover.map
              (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
                Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
              { fst := i, snd := j }) ≫
      (pullbackRightPullbackFstIso g (Scheme.OpenCover.map (Scheme.affineCover Z) i) f).hom)
[PROOFSTEP]
apply (config := { allowSynthFailures := true }) AlgebraicGeometry.quasiSeparatedOfMono
[GOAL]
case inst
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
i : (Scheme.affineCover Z).J
j : (Scheme.affineCover (pullback g (Scheme.OpenCover.map (Scheme.affineCover Z) i))).J
H :
  QuasiSeparatedSpace
    ↑↑(pullback (f ≫ g)
                (Scheme.OpenCover.map (Scheme.affineCover Z) i)).toLocallyRingedSpace.toSheafedSpace.toPresheafedSpace
⊢ Mono
    (pullback.map f
        (Scheme.OpenCover.map
          (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
            Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
          { fst := i, snd := j })
        f (Scheme.OpenCover.map (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) { fst := i, snd := j }.fst)
        (𝟙 X)
        (Scheme.OpenCover.map
          ((fun x =>
              Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
            { fst := i, snd := j }.fst)
          { fst := i, snd := j }.snd)
        (𝟙 Y) (_ : f ≫ 𝟙 Y = 𝟙 X ≫ f)
        (_ :
          Scheme.OpenCover.map
                (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
                  Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
                { fst := i, snd := j } ≫
              𝟙 Y =
            Scheme.OpenCover.map
              (Scheme.OpenCover.bind (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) fun x =>
                Scheme.affineCover (Scheme.OpenCover.obj (Scheme.OpenCover.pullbackCover (Scheme.affineCover Z) g) x))
              { fst := i, snd := j }) ≫
      (pullbackRightPullbackFstIso g (Scheme.OpenCover.map (Scheme.affineCover Z) i) f).hom)
[PROOFSTEP]
apply mono_comp
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsAffineOpen U
f : ↑(X.presheaf.obj (op U))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
⊢ ∃ n y, y |_ Scheme.basicOpen X f = (f |_ Scheme.basicOpen X f) ^ n * x
[PROOFSTEP]
have := (isLocalization_basicOpen hU f).2
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsAffineOpen U
f : ↑(X.presheaf.obj (op U))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
this :
  ∀ (z : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
    ∃ x,
      z * ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) ↑x.snd =
        ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) x.fst
⊢ ∃ n y, y |_ Scheme.basicOpen X f = (f |_ Scheme.basicOpen X f) ^ n * x
[PROOFSTEP]
obtain ⟨⟨y, _, n, rfl⟩, d⟩ := this x
[GOAL]
case intro.mk.mk.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsAffineOpen U
f : ↑(X.presheaf.obj (op U))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
this :
  ∀ (z : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
    ∃ x,
      z * ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) ↑x.snd =
        ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) x.fst
y : ↑(X.presheaf.obj (op U))
n : ℕ
d :
  x *
      ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f))))
        ↑(y,
              { val := (fun x x_1 => x ^ x_1) f n,
                property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n) }).snd =
    ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f))))
      (y,
          { val := (fun x x_1 => x ^ x_1) f n,
            property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n) }).fst
⊢ ∃ n y, y |_ Scheme.basicOpen X f = (f |_ Scheme.basicOpen X f) ^ n * x
[PROOFSTEP]
use n, y
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsAffineOpen U
f : ↑(X.presheaf.obj (op U))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
this :
  ∀ (z : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
    ∃ x,
      z * ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) ↑x.snd =
        ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) x.fst
y : ↑(X.presheaf.obj (op U))
n : ℕ
d :
  x *
      ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f))))
        ↑(y,
              { val := (fun x x_1 => x ^ x_1) f n,
                property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n) }).snd =
    ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f))))
      (y,
          { val := (fun x x_1 => x ^ x_1) f n,
            property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n) }).fst
⊢ y |_ Scheme.basicOpen X f = (f |_ Scheme.basicOpen X f) ^ n * x
[PROOFSTEP]
delta TopCat.Presheaf.restrictOpen TopCat.Presheaf.restrict
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsAffineOpen U
f : ↑(X.presheaf.obj (op U))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
this :
  ∀ (z : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
    ∃ x,
      z * ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) ↑x.snd =
        ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) x.fst
y : ↑(X.presheaf.obj (op U))
n : ℕ
d :
  x *
      ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f))))
        ↑(y,
              { val := (fun x x_1 => x ^ x_1) f n,
                property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n) }).snd =
    ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f))))
      (y,
          { val := (fun x x_1 => x ^ x_1) f n,
            property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n) }).fst
⊢ ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑U)).op) y =
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑U)).op) f ^ n * x
[PROOFSTEP]
simpa [mul_comm x] using d.symm
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
⊢ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁
[PROOFSTEP]
erw [X.basicOpen_res]
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
⊢ U₁ ⊓ Scheme.basicOpen X f ≤ U₁
[PROOFSTEP]
exact inf_le_left
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
⊢ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f
[PROOFSTEP]
erw [X.basicOpen_res]
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
⊢ U₁ ⊓ Scheme.basicOpen X f ≤ Scheme.basicOpen X f
[PROOFSTEP]
exact inf_le_right
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
⊢ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂
[PROOFSTEP]
rw [X.basicOpen_res]
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
⊢ U₂ ⊓ Scheme.basicOpen X f ≤ U₂
[PROOFSTEP]
exact inf_le_left
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
⊢ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f
[PROOFSTEP]
rw [X.basicOpen_res]
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
⊢ U₂ ⊓ Scheme.basicOpen X f ≤ Scheme.basicOpen X f
[PROOFSTEP]
exact inf_le_right
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
⊢ ∃ n,
    ↑(X.presheaf.map (homOfLE h₁).op) (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f ^ (n + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE h₂).op) (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f ^ (n + n₁) * y₂)
[PROOFSTEP]
obtain ⟨⟨_, n, rfl⟩, e⟩ :=
  (@IsLocalization.eq_iff_exists _ _ _ _ _ _
        (isLocalization_basicOpen S.2 (X.presheaf.map (homOfLE <| le_trans h₁ le_sup_left).op f))
        (X.presheaf.map (homOfLE <| h₁).op (X.presheaf.map (homOfLE le_sup_left).op f ^ n₂ * y₁))
        (X.presheaf.map (homOfLE <| h₂).op (X.presheaf.map (homOfLE le_sup_right).op f ^ n₁ * y₂))).mp <|
    by
    -- Porting note: was just a `simp`, but know as some lemmas need `erw`, just a `simp` does not
        -- leave the goal in a desired form
    rw [RingHom.algebraMap_toAlgebra, map_mul, map_mul, map_pow, map_pow, map_mul, map_pow, map_mul]
    erw [map_pow]
    rw [← comp_apply, ← comp_apply]
    erw [← comp_apply, ← comp_apply, ← comp_apply, ← comp_apply]
    simp only [← Functor.map_comp, ← op_comp, homOfLE_comp]
    have h₃ : X.basicOpen ((X.presheaf.map (homOfLE (h₁.trans le_sup_left)).op) f) ≤ S.val := by
      simpa only [X.basicOpen_res] using inf_le_left
    trans
      X.presheaf.map (homOfLE <| h₃.trans <| h₁.trans le_sup_left).op f ^ (n₂ + n₁) *
        X.presheaf.map (homOfLE <| (X.basicOpen_res f _).trans_le inf_le_right).op x
    · rw [pow_add, mul_assoc]; congr 1
      convert congr_arg (X.presheaf.map (homOfLE _).op) e₁ using 1
      pick_goal 3
      · rw [X.basicOpen_res, X.basicOpen_res]; rintro x ⟨H₁, H₂⟩; exact ⟨h₁ H₁, H₂⟩
      · simp only [map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp]; congr 1
      · simp only [map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp]; congr
    · rw [add_comm, pow_add, mul_assoc]; congr 1
      convert congr_arg (X.presheaf.map (homOfLE _).op) e₂.symm
      · simp only [map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp]; congr
      · simp only [map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp]; congr
      · simp only [X.basicOpen_res]
        rintro x ⟨H₁, H₂⟩; exact ⟨h₂ H₁, H₂⟩
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
⊢ ↑(algebraMap ↑(X.presheaf.obj (op ↑S))
          ↑(X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f)))))
      (↑(X.presheaf.map (homOfLE h₁).op) (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f ^ n₂ * y₁)) =
    ↑(algebraMap ↑(X.presheaf.obj (op ↑S))
          ↑(X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f)))))
      (↑(X.presheaf.map (homOfLE h₂).op) (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f ^ n₁ * y₂))
[PROOFSTEP]
rw [RingHom.algebraMap_toAlgebra, map_mul, map_mul, map_pow, map_pow, map_mul, map_pow, map_mul]
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
⊢ ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      ↑S)).op)
          (↑(X.presheaf.map (homOfLE h₁).op) (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f)) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    ↑S)).op)
        (↑(X.presheaf.map (homOfLE h₁).op) y₁) =
    ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    ↑S)).op)
        (↑(X.presheaf.map (homOfLE h₂).op) (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^ n₁) *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    ↑S)).op)
        (↑(X.presheaf.map (homOfLE h₂).op) y₂)
[PROOFSTEP]
erw [map_pow]
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
⊢ ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      ↑S)).op)
          (↑(X.presheaf.map (homOfLE h₁).op) (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f)) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    ↑S)).op)
        (↑(X.presheaf.map (homOfLE h₁).op) y₁) =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      ↑S)).op)
          (↑(X.presheaf.map (homOfLE h₂).op) (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f)) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    ↑S)).op)
        (↑(X.presheaf.map (homOfLE h₂).op) y₂)
[PROOFSTEP]
rw [← comp_apply, ← comp_apply]
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
⊢ ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op ≫ X.presheaf.map (homOfLE h₁).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    ↑S)).op)
        (↑(X.presheaf.map (homOfLE h₁).op) y₁) =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op ≫ X.presheaf.map (homOfLE h₂).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    ↑S)).op)
        (↑(X.presheaf.map (homOfLE h₂).op) y₂)
[PROOFSTEP]
erw [← comp_apply, ← comp_apply, ← comp_apply, ← comp_apply]
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
⊢ ↑((X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op ≫ X.presheaf.map (homOfLE h₁).op) ≫
              X.presheaf.map
                (homOfLE
                    (_ :
                      RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                        ↑S)).op)
          f ^
        n₂ *
      ↑(X.presheaf.map (homOfLE h₁).op ≫
            X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      ↑S)).op)
        y₁ =
    ↑((X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op ≫ X.presheaf.map (homOfLE h₂).op) ≫
              X.presheaf.map
                (homOfLE
                    (_ :
                      RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                        ↑S)).op)
          f ^
        n₁ *
      ↑(X.presheaf.map (homOfLE h₂).op ≫
            X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      ↑S)).op)
        y₂
[PROOFSTEP]
simp only [← Functor.map_comp, ← op_comp, homOfLE_comp]
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
⊢ ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      U₁ ⊔ U₂)).op)
          f ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    U₁)).op)
        y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      U₁ ⊔ U₂)).op)
          f ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    U₂)).op)
        y₂
[PROOFSTEP]
have h₃ : X.basicOpen ((X.presheaf.map (homOfLE (h₁.trans le_sup_left)).op) f) ≤ S.val := by
  simpa only [X.basicOpen_res] using inf_le_left
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
⊢ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
[PROOFSTEP]
simpa only [X.basicOpen_res] using inf_le_left
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      U₁ ⊔ U₂)).op)
          f ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    U₁)).op)
        y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      U₁ ⊔ U₂)).op)
          f ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    U₂)).op)
        y₂
[PROOFSTEP]
trans
  X.presheaf.map (homOfLE <| h₃.trans <| h₁.trans le_sup_left).op f ^ (n₂ + n₁) *
    X.presheaf.map (homOfLE <| (X.basicOpen_res f _).trans_le inf_le_right).op x
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      U₁ ⊔ U₂)).op)
          f ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    U₁)).op)
        y₁ =
    ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁ ⊔ U₂)).op)
          f ^
        (n₂ + n₁) *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
[PROOFSTEP]
rw [pow_add, mul_assoc]
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      U₁ ⊔ U₂)).op)
          f ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    U₁)).op)
        y₁ =
    ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁ ⊔ U₂)).op)
          f ^
        n₂ *
      (↑(X.presheaf.map
                (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁ ⊔ U₂)).op)
            f ^
          n₁ *
        ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      Scheme.basicOpen X f)).op)
          x)
[PROOFSTEP]
congr 1
[GOAL]
case e_a
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
          (homOfLE
              (_ :
                RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁ ⊔ U₂)).op)
          f ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
[PROOFSTEP]
convert congr_arg (X.presheaf.map (homOfLE _).op) e₁ using 1
[GOAL]
case h.e'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
          (homOfLE
              (_ :
                RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE ?e_a.convert_1✝).op)
      (↑(X.presheaf.map
            (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
        y₁)
case h.e'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁ ⊔ U₂)).op)
          f ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x =
    ↑(X.presheaf.map (homOfLE ?e_a.convert_1✝).op)
      (↑(X.presheaf.map
                (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
            (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
          n₁ *
        ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤
                      Scheme.basicOpen X f)).op)
          x)
case e_a.convert_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f)
[PROOFSTEP]
pick_goal 3
[GOAL]
case e_a.convert_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f)
[PROOFSTEP]
rw [X.basicOpen_res, X.basicOpen_res]
[GOAL]
case e_a.convert_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑S ⊓ Scheme.basicOpen X f ≤ U₁ ⊓ Scheme.basicOpen X f
[PROOFSTEP]
rintro x ⟨H₁, H₂⟩
[GOAL]
case e_a.convert_1.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x✝ : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x✝
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x✝
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
x : ↑↑X.toPresheafedSpace
H₁ : x ∈ ↑↑S
H₂ : x ∈ ↑(Scheme.basicOpen X f)
⊢ x ∈ ↑(U₁ ⊓ Scheme.basicOpen X f)
[PROOFSTEP]
exact ⟨h₁ H₁, H₂⟩
[GOAL]
case h.e'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
          (homOfLE
              (_ :
                RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map
          (homOfLE
              (_ :
                Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f))).op)
      (↑(X.presheaf.map
            (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
        y₁)
[PROOFSTEP]
simp only [map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp]
[GOAL]
case h.e'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
          (homOfLE
              (_ :
                RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map
          (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f)) ≫
              homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁
[PROOFSTEP]
congr 1
[GOAL]
case h.e'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁ ⊔ U₂)).op)
          f ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x =
    ↑(X.presheaf.map
          (homOfLE
              (_ :
                Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f))).op)
      (↑(X.presheaf.map
                (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
            (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
          n₁ *
        ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤
                      Scheme.basicOpen X f)).op)
          x)
[PROOFSTEP]
simp only [map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp]
[GOAL]
case h.e'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁ ⊔ U₂)).op)
          f ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x =
    ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                        Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f)) ≫
                  homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁) ≫
                    homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op)
          f ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f)) ≫
                homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤
                      Scheme.basicOpen X f)).op)
        x
[PROOFSTEP]
congr
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁ ⊔ U₂)).op)
          f ^
        (n₂ + n₁) *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      U₁ ⊔ U₂)).op)
          f ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    U₂)).op)
        y₂
[PROOFSTEP]
rw [add_comm, pow_add, mul_assoc]
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁ ⊔ U₂)).op)
          f ^
        n₁ *
      (↑(X.presheaf.map
                (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁ ⊔ U₂)).op)
            f ^
          n₂ *
        ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      Scheme.basicOpen X f)).op)
          x) =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                      U₁ ⊔ U₂)).op)
          f ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
                    U₂)).op)
        y₂
[PROOFSTEP]
congr 1
[GOAL]
case e_a
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁ ⊔ U₂)).op)
          f ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x =
    ↑(X.presheaf.map
          (homOfLE
              (_ :
                RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂
[PROOFSTEP]
convert congr_arg (X.presheaf.map (homOfLE _).op) e₂.symm
[GOAL]
case h.e'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁ ⊔ U₂)).op)
          f ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x =
    ↑(X.presheaf.map (homOfLE ?e_a.convert_1✝).op)
      (↑(X.presheaf.map
                (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
            (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
          n₂ *
        ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤
                      Scheme.basicOpen X f)).op)
          x)
[PROOFSTEP]
simp only [map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp]
[GOAL]
case h.e'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₁ ⊔ U₂)).op)
          f ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x =
    ↑(X.presheaf.map
              (homOfLE ?e_a.convert_1✝ ≫
                  homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂) ≫
                    homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op)
          f ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE ?e_a.convert_1✝ ≫
                homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤
                      Scheme.basicOpen X f)).op)
        x
[PROOFSTEP]
congr
[GOAL]
case h.e'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
          (homOfLE
              (_ :
                RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE ?e_a.convert_1✝).op)
      (↑(X.presheaf.map
            (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
        y₂)
[PROOFSTEP]
simp only [map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp]
[GOAL]
case h.e'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑(X.presheaf.map
          (homOfLE
              (_ :
                RingedSpace.basicOpen X.toSheafedSpace (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map
          (homOfLE ?e_a.convert_1✝ ≫
              homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂
[PROOFSTEP]
congr
[GOAL]
case e_a.convert_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤
    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f)
[PROOFSTEP]
simp only [X.basicOpen_res]
[GOAL]
case e_a.convert_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
⊢ ↑S ⊓ Scheme.basicOpen X f ≤ U₂ ⊓ Scheme.basicOpen X f
[PROOFSTEP]
rintro x ⟨H₁, H₂⟩
[GOAL]
case e_a.convert_1.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x✝ : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x✝
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x✝
h₃ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) ≤ ↑S
x : ↑↑X.toPresheafedSpace
H₁ : x ∈ ↑↑S
H₂ : x ∈ ↑(Scheme.basicOpen X f)
⊢ x ∈ ↑(U₂ ⊓ Scheme.basicOpen X f)
[PROOFSTEP]
exact ⟨h₂ H₁, H₂⟩
[GOAL]
case intro.mk.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n : ℕ
e :
  ↑{ val := (fun x x_1 => x ^ x_1) (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) n,
          property :=
            (_ :
              ∃ y,
                (fun x x_1 => x ^ x_1) (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) y =
                  (fun x x_1 => x ^ x_1) (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) n) } *
      ↑(X.presheaf.map (homOfLE h₁).op) (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f ^ n₂ * y₁) =
    ↑{ val := (fun x x_1 => x ^ x_1) (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) n,
          property :=
            (_ :
              ∃ y,
                (fun x x_1 => x ^ x_1) (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) y =
                  (fun x x_1 => x ^ x_1) (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) n) } *
      ↑(X.presheaf.map (homOfLE h₂).op) (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f ^ n₁ * y₂)
⊢ ∃ n,
    ↑(X.presheaf.map (homOfLE h₁).op) (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f ^ (n + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE h₂).op) (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f ^ (n + n₁) * y₂)
[PROOFSTEP]
use n
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n : ℕ
e :
  ↑{ val := (fun x x_1 => x ^ x_1) (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) n,
          property :=
            (_ :
              ∃ y,
                (fun x x_1 => x ^ x_1) (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) y =
                  (fun x x_1 => x ^ x_1) (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) n) } *
      ↑(X.presheaf.map (homOfLE h₁).op) (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f ^ n₂ * y₁) =
    ↑{ val := (fun x x_1 => x ^ x_1) (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) n,
          property :=
            (_ :
              ∃ y,
                (fun x x_1 => x ^ x_1) (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) y =
                  (fun x x_1 => x ^ x_1) (↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f) n) } *
      ↑(X.presheaf.map (homOfLE h₂).op) (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f ^ n₁ * y₂)
⊢ ↑(X.presheaf.map (homOfLE h₁).op) (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f ^ (n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE h₂).op) (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f ^ (n + n₁) * y₂)
[PROOFSTEP]
simp only [pow_add, map_pow, map_mul, ← comp_apply, ← mul_assoc, ← Functor.map_comp, Subtype.coe_mk] at e ⊢
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
S : ↑(Scheme.affineOpens X)
U₁ U₂ : Opens ↑↑X.toPresheafedSpace
n₁ n₂ : ℕ
y₁ : ↑(X.presheaf.obj (op U₁))
y₂ : ↑(X.presheaf.obj (op U₂))
f : ↑(X.presheaf.obj (op (U₁ ⊔ U₂)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
h₁ : ↑S ≤ U₁
h₂ : ↑S ≤ U₂
e₁ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
      y₁ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ U₁)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
e₂ :
  ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
      y₂ =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ U₂)).op)
          (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n : ℕ
e :
  ↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f ^ n *
        ↑(X.presheaf.map ((homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op ≫ (homOfLE h₁).op)) f ^ n₂ *
      ↑(X.presheaf.map (homOfLE h₁).op) y₁ =
    ↑(X.presheaf.map (homOfLE (_ : ↑S ≤ U₁ ⊔ U₂)).op) f ^ n *
        ↑(X.presheaf.map ((homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op ≫ (homOfLE h₂).op)) f ^ n₁ *
      ↑(X.presheaf.map (homOfLE h₂).op) y₂
⊢ ↑(X.presheaf.map ((homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op ≫ (homOfLE h₁).op)) f ^ n *
        ↑(X.presheaf.map ((homOfLE (_ : U₁ ≤ U₁ ⊔ U₂)).op ≫ (homOfLE h₁).op)) f ^ n₂ *
      ↑(X.presheaf.map (homOfLE h₁).op) y₁ =
    ↑(X.presheaf.map ((homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op ≫ (homOfLE h₂).op)) f ^ n *
        ↑(X.presheaf.map ((homOfLE (_ : U₂ ≤ U₁ ⊔ U₂)).op ≫ (homOfLE h₂).op)) f ^ n₁ *
      ↑(X.presheaf.map (homOfLE h₂).op) y₂
[PROOFSTEP]
exact e
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f : ↑(X.presheaf.obj (op U))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
⊢ ∃ n y, y |_ Scheme.basicOpen X f = (f |_ Scheme.basicOpen X f) ^ n * x
[PROOFSTEP]
delta TopCat.Presheaf.restrictOpen TopCat.Presheaf.restrict
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f : ↑(X.presheaf.obj (op U))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑U)).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑U)).op) f ^ n * x
[PROOFSTEP]
revert hU' f x
[GOAL]
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
⊢ IsQuasiSeparated U.carrier →
    ∀ (f : ↑(X.presheaf.obj (op U))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑U)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑U)).op) f ^
              n *
            x
[PROOFSTEP]
apply compact_open_induction_on (P := _) U hU
[GOAL]
case h₁
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
⊢ IsQuasiSeparated ⊥.carrier →
    ∀ (f : ↑(X.presheaf.obj (op ⊥))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑⊥)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑⊥)).op) f ^
              n *
            x
[PROOFSTEP]
intro _ f x
[GOAL]
case h₁
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU'✝ : IsQuasiSeparated ⊥.carrier
f : ↑(X.presheaf.obj (op ⊥))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑⊥)).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑⊥)).op) f ^ n * x
[PROOFSTEP]
use 0, f
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU'✝ : IsQuasiSeparated ⊥.carrier
f : ↑(X.presheaf.obj (op ⊥))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
⊢ ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑⊥)).op) f =
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑⊥)).op) f ^ 0 * x
[PROOFSTEP]
refine' @Subsingleton.elim _ (CommRingCat.subsingleton_of_isTerminal (X.sheaf.isTerminalOfEqEmpty _)) _ _
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU'✝ : IsQuasiSeparated ⊥.carrier
f : ↑(X.presheaf.obj (op ⊥))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
⊢ Scheme.basicOpen X f = ⊥
[PROOFSTEP]
erw [eq_bot_iff]
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU'✝ : IsQuasiSeparated ⊥.carrier
f : ↑(X.presheaf.obj (op ⊥))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
⊢ Scheme.basicOpen X f ≤ ⊥
[PROOFSTEP]
exact X.basicOpen_le f
[GOAL]
case h₂
X✝ Y : Scheme
f : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
⊢ ∀ (S : Opens ↑↑X.toPresheafedSpace),
    IsCompact S.carrier →
      ∀ (U : ↑(Scheme.affineOpens X)),
        (IsQuasiSeparated S.carrier →
            ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
              ∃ n y,
                ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op)
                    y =
                  ↑(X.presheaf.map
                            (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op)
                        f ^
                      n *
                    x) →
          IsQuasiSeparated (S ⊔ ↑U).carrier →
            ∀ (f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
              ∃ n y,
                ↑(X.presheaf.map
                        (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
                    y =
                  ↑(X.presheaf.map
                            (homOfLE
                                (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
                        f ^
                      n *
                    x
[PROOFSTEP]
intro S hS U hU hSU f x
[GOAL]
case h₂
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n *
        x
[PROOFSTEP]
obtain ⟨n₁, y₁, hy₁⟩ :=
  hU (hSU.of_subset <| Set.subset_union_left _ _) (X.presheaf.map (homOfLE le_sup_left).op f)
    (X.presheaf.map (homOfLE _).op x)
      -- · rw [X.basicOpen_res]; exact inf_le_right
          -- We know that such `y₂, n₂` exists on `U` since `U` is affine.
[GOAL]
case h₂.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n *
        x
[PROOFSTEP]
obtain ⟨n₂, y₂, hy₂⟩ :=
  exists_eq_pow_mul_of_isAffineOpen X _ U.2 (X.presheaf.map (homOfLE le_sup_right).op f)
    (X.presheaf.map (homOfLE _).op x)
[GOAL]
case h₂.intro.intro.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  y₂ |_ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) =
    (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f |_
          Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n *
        x
[PROOFSTEP]
delta TopCat.Presheaf.restrictOpen TopCat.Presheaf.restrict at hy₂
[GOAL]
case h₂.intro.intro.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n *
        x
[PROOFSTEP]
obtain ⟨s, hs', hs⟩ :=
  (isCompact_open_iff_eq_finset_affine_union _).mp
    ⟨hSU _ _ (Set.subset_union_left _ _) S.2 hS (Set.subset_union_right _ _) U.1.2 U.2.isCompact, (S ⊓ U.1).2⟩
[GOAL]
case h₂.intro.intro.intro.intro.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
hs : ↑S ∩ ↑↑U = ⋃ (i : ↑(Scheme.affineOpens X)) (_ : i ∈ s), ↑↑i
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n *
        x
[PROOFSTEP]
haveI := hs'.to_subtype
[GOAL]
case h₂.intro.intro.intro.intro.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
hs : ↑S ∩ ↑↑U = ⋃ (i : ↑(Scheme.affineOpens X)) (_ : i ∈ s), ↑↑i
this : Finite ↑s
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n *
        x
[PROOFSTEP]
cases nonempty_fintype s
[GOAL]
case h₂.intro.intro.intro.intro.intro.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
hs : ↑S ∩ ↑↑U = ⋃ (i : ↑(Scheme.affineOpens X)) (_ : i ∈ s), ↑↑i
this : Finite ↑s
val✝ : Fintype ↑s
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n *
        x
[PROOFSTEP]
replace hs : S ⊓ U.1 = iSup fun i : s => (i : Opens X.carrier) := by ext1; simpa using hs
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
hs : ↑S ∩ ↑↑U = ⋃ (i : ↑(Scheme.affineOpens X)) (_ : i ∈ s), ↑↑i
this : Finite ↑s
val✝ : Fintype ↑s
⊢ S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
[PROOFSTEP]
ext1
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
hs : ↑S ∩ ↑↑U = ⋃ (i : ↑(Scheme.affineOpens X)) (_ : i ∈ s), ↑↑i
this : Finite ↑s
val✝ : Fintype ↑s
⊢ ↑(S ⊓ ↑U) = ↑(⨆ (i : ↑s), ↑↑i)
[PROOFSTEP]
simpa using hs
[GOAL]
case h₂.intro.intro.intro.intro.intro.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n *
        x
[PROOFSTEP]
have hs₁ : ∀ i : s, i.1.1 ≤ S := by
  intro i; change (i : Opens X.carrier) ≤ S
  refine' le_trans _ inf_le_left; swap; exact U.1;
  erw [hs]
    -- Porting note: have to add argument explicitly
  exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
⊢ ∀ (i : ↑s), ↑↑i ≤ S
[PROOFSTEP]
intro i
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
i : ↑s
⊢ ↑↑i ≤ S
[PROOFSTEP]
change (i : Opens X.carrier) ≤ S
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
i : ↑s
⊢ ↑↑i ≤ S
[PROOFSTEP]
refine' le_trans _ inf_le_left
[GOAL]
case refine'_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
i : ↑s
⊢ ↑↑i ≤ S ⊓ ?refine'_2
case refine'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
i : ↑s
⊢ Opens ↑↑X.toPresheafedSpace
[PROOFSTEP]
swap
[GOAL]
case refine'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
i : ↑s
⊢ Opens ↑↑X.toPresheafedSpace
case refine'_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
i : ↑s
⊢ ↑↑i ≤ S ⊓ ?refine'_2
[PROOFSTEP]
exact U.1
[GOAL]
case refine'_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
i : ↑s
⊢ ↑↑i ≤ S ⊓ ↑U
[PROOFSTEP]
erw [hs]
  -- Porting note: have to add argument explicitly
[GOAL]
case refine'_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
i : ↑s
⊢ ↑↑i ≤ ⨆ (i : ↑s), ↑↑i
[PROOFSTEP]
exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
[GOAL]
case h₂.intro.intro.intro.intro.intro.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n *
        x
[PROOFSTEP]
have hs₂ : ∀ i : s, i.1.1 ≤ U.1 := by
  intro i; change (i : Opens X.carrier) ≤ U
  refine' le_trans _ inf_le_right; swap; exact S;
  erw [hs]
    -- Porting note: have to add argument explicitly
  exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
⊢ ∀ (i : ↑s), ↑↑i ≤ ↑U
[PROOFSTEP]
intro i
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
i : ↑s
⊢ ↑↑i ≤ ↑U
[PROOFSTEP]
change (i : Opens X.carrier) ≤ U
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
i : ↑s
⊢ ↑↑i ≤ ↑U
[PROOFSTEP]
refine' le_trans _ inf_le_right
[GOAL]
case refine'_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
i : ↑s
⊢ ↑↑i ≤ ?refine'_2 ⊓ ↑U
case refine'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
i : ↑s
⊢ Opens ↑↑X.toPresheafedSpace
[PROOFSTEP]
swap
[GOAL]
case refine'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
i : ↑s
⊢ Opens ↑↑X.toPresheafedSpace
case refine'_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
i : ↑s
⊢ ↑↑i ≤ ?refine'_2 ⊓ ↑U
[PROOFSTEP]
exact S
[GOAL]
case refine'_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
i : ↑s
⊢ ↑↑i ≤ S ⊓ ↑U
[PROOFSTEP]
erw [hs]
  -- Porting note: have to add argument explicitly
[GOAL]
case refine'_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
i : ↑s
⊢ ↑↑i ≤ ⨆ (i : ↑s), ↑↑i
[PROOFSTEP]
exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
[GOAL]
case h₂.intro.intro.intro.intro.intro.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n *
        x
[PROOFSTEP]
have :
  ∀ i : s,
    ∃ n : ℕ,
      X.presheaf.map (homOfLE <| hs₁ i).op (X.presheaf.map (homOfLE le_sup_left).op f ^ (n + n₂) * y₁) =
        X.presheaf.map (homOfLE <| hs₂ i).op (X.presheaf.map (homOfLE le_sup_right).op f ^ (n + n₁) * y₂) :=
  by
  intro i
  exact exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux X i.1 S U (hs₁ i) (hs₂ i) hy₁ hy₂
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
⊢ ∀ (i : ↑s),
    ∃ n,
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n + n₂) * y₁) =
        ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n + n₁) * y₂)
[PROOFSTEP]
intro i
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map (homOfLE ?m.483627).op) x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map (homOfLE ?m.484649).op) x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
i : ↑s
⊢ ∃ n,
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op) (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n + n₁) * y₂)
[PROOFSTEP]
exact exists_eq_pow_mul_of_is_compact_of_quasi_separated_space_aux X i.1 S U (hs₁ i) (hs₂ i) hy₁ hy₂
[GOAL]
case h₂.intro.intro.intro.intro.intro.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
this :
  ∀ (i : ↑s),
    ∃ n,
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n + n₂) * y₁) =
        ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n + n₁) * y₂)
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n *
        x
[PROOFSTEP]
choose n hn using this
[GOAL]
case h₂.intro.intro.intro.intro.intro.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n *
        x
[PROOFSTEP]
have :
  X.presheaf.map (homOfLE <| inf_le_left).op
      (X.presheaf.map (homOfLE le_sup_left).op f ^ (Finset.univ.sup n + n₂) * y₁) =
    X.presheaf.map (homOfLE <| inf_le_right).op
      (X.presheaf.map (homOfLE le_sup_right).op f ^ (Finset.univ.sup n + n₁) * y₂) :=
  by
  fapply X.sheaf.eq_of_locally_eq' fun i : s => i.1.1
  · refine' fun i => homOfLE _; erw [hs];
    -- Porting note: have to add argument explicitlyexact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
  · exact le_of_eq hs
  · intro i
    replace hn :=
      congr_arg (fun x => X.presheaf.map (homOfLE (le_trans (hs₁ i) le_sup_left)).op f ^ (Finset.univ.sup n - n i) * x)
        (hn i)
    dsimp only at hn
    delta Scheme.sheaf SheafedSpace.sheaf
    simp only [← map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp, ← mul_assoc] at hn ⊢
    erw [← map_mul, ← map_mul] at hn
    rw [← pow_add, ← pow_add, ← add_assoc, ← add_assoc, tsub_add_cancel_of_le] at hn
    convert hn
    exact Finset.le_sup (Finset.mem_univ _)
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
⊢ ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
[PROOFSTEP]
fapply X.sheaf.eq_of_locally_eq' fun i : s => i.1.1
[GOAL]
case iUV
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
⊢ (i : ↑s) → ↑↑i ⟶ S ⊓ ↑U
[PROOFSTEP]
refine' fun i => homOfLE _
[GOAL]
case iUV
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
i : ↑s
⊢ ↑↑i ≤ S ⊓ ↑U
[PROOFSTEP]
erw [hs]
[GOAL]
case iUV
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
i : ↑s
⊢ ↑↑i ≤ ⨆ (i : ↑s), ↑↑i
[PROOFSTEP]
exact @le_iSup (Opens X) s _ (fun (i : s) => (i : Opens X)) i
[GOAL]
case hcover
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
⊢ S ⊓ ↑U ≤ ⨆ (i : ↑s), ↑↑i
[PROOFSTEP]
exact le_of_eq hs
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
⊢ ∀ (i : ↑s),
    ↑((Scheme.sheaf X).val.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁)) =
      ↑((Scheme.sheaf X).val.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂))
[PROOFSTEP]
intro i
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
i : ↑s
⊢ ↑((Scheme.sheaf X).val.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
        (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁)) =
    ↑((Scheme.sheaf X).val.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂))
[PROOFSTEP]
replace hn :=
  congr_arg (fun x => X.presheaf.map (homOfLE (le_trans (hs₁ i) le_sup_left)).op f ^ (Finset.univ.sup n - n i) * x)
    (hn i)
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
i : ↑s
hn :
  (fun x => ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n - n i) * x)
      (↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op)
        (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁)) =
    (fun x => ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n - n i) * x)
      (↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂))
⊢ ↑((Scheme.sheaf X).val.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
        (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁)) =
    ↑((Scheme.sheaf X).val.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂))
[PROOFSTEP]
dsimp only at hn
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
i : ↑s
hn :
  ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n - n i) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op)
        (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n - n i) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
⊢ ↑((Scheme.sheaf X).val.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
        (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁)) =
    ↑((Scheme.sheaf X).val.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂))
[PROOFSTEP]
delta Scheme.sheaf SheafedSpace.sheaf
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
i : ↑s
hn :
  ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n - n i) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op)
        (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n - n i) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
⊢ ↑({ val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) }.val.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
        (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁)) =
    ↑({ val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) }.val.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂))
[PROOFSTEP]
simp only [← map_pow, map_mul, ← comp_apply, ← Functor.map_comp, ← op_comp, ← mul_assoc] at hn ⊢
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
i : ↑s
hn :
  ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) (f ^ (Finset.sup Finset.univ n - n i)) *
        ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S) ≫ homOfLE (_ : S ≤ S ⊔ ↑U)).op) (f ^ (n i + n₂)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) y₁ =
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) (f ^ (Finset.sup Finset.univ n - n i)) *
        ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U) ≫ homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) (f ^ (n i + n₁)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op) y₂
⊢ ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U) ≫ homOfLE (_ : S ⊓ ↑U ≤ S) ≫ homOfLE (_ : S ≤ S ⊔ ↑U)).op)
        (f ^ (Finset.sup Finset.univ n + n₂)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U) ≫ homOfLE (_ : S ⊓ ↑U ≤ S)).op) y₁ =
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U) ≫ homOfLE (_ : S ⊓ ↑U ≤ ↑U) ≫ homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
        (f ^ (Finset.sup Finset.univ n + n₁)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U) ≫ homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op) y₂
[PROOFSTEP]
erw [← map_mul, ← map_mul] at hn
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
i : ↑s
hn :
  ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) (f ^ (Finset.sup Finset.univ n - n i) * f ^ (n i + n₂)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) y₁ =
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) (f ^ (Finset.sup Finset.univ n - n i) * f ^ (n i + n₁)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op) y₂
⊢ ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U) ≫ homOfLE (_ : S ⊓ ↑U ≤ S) ≫ homOfLE (_ : S ≤ S ⊔ ↑U)).op)
        (f ^ (Finset.sup Finset.univ n + n₂)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U) ≫ homOfLE (_ : S ⊓ ↑U ≤ S)).op) y₁ =
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U) ≫ homOfLE (_ : S ⊓ ↑U ≤ ↑U) ≫ homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
        (f ^ (Finset.sup Finset.univ n + n₁)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U) ≫ homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op) y₂
[PROOFSTEP]
rw [← pow_add, ← pow_add, ← add_assoc, ← add_assoc, tsub_add_cancel_of_le] at hn
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
i : ↑s
hn :
  ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) (f ^ (Finset.sup Finset.univ n + n₂)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) y₁ =
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) (f ^ (Finset.sup Finset.univ n + n₁)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op) y₂
⊢ ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U) ≫ homOfLE (_ : S ⊓ ↑U ≤ S) ≫ homOfLE (_ : S ≤ S ⊔ ↑U)).op)
        (f ^ (Finset.sup Finset.univ n + n₂)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U) ≫ homOfLE (_ : S ⊓ ↑U ≤ S)).op) y₁ =
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U) ≫ homOfLE (_ : S ⊓ ↑U ≤ ↑U) ≫ homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
        (f ^ (Finset.sup Finset.univ n + n₁)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊓ ↑U) ≫ homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op) y₂
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
i : ↑s
hn :
  ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) (f ^ (Finset.sup Finset.univ n - n i + n i + n₂)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) y₁ =
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) (f ^ (Finset.sup Finset.univ n - n i + n i + n₁)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op) y₂
⊢ n i ≤ Finset.sup Finset.univ n
[PROOFSTEP]
convert hn
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
i : ↑s
hn :
  ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) (f ^ (Finset.sup Finset.univ n - n i + n i + n₂)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) y₁ =
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S ⊔ ↑U)).op) (f ^ (Finset.sup Finset.univ n - n i + n i + n₁)) *
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op) y₂
⊢ n i ≤ Finset.sup Finset.univ n
[PROOFSTEP]
exact Finset.le_sup (Finset.mem_univ _)
[GOAL]
case h₂.intro.intro.intro.intro.intro.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ∃ n y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n *
        x
[PROOFSTEP]
use Finset.univ.sup n + n₁ + n₂
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ∃ y,
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) y =
      ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          (Finset.sup Finset.univ n + n₁ + n₂) *
        x
[PROOFSTEP]
use(X.sheaf.objSupIsoProdEqLocus S U.1).inv ⟨⟨_ * _, _ * _⟩, this⟩
[GOAL]
case h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
      (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
        {
          val :=
            (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
              ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
          property := this }) =
    ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op) f ^
        (Finset.sup Finset.univ n + n₁ + n₂) *
      x
[PROOFSTEP]
refine'
  X.sheaf.eq_of_locally_eq₂ (homOfLE (_ : X.basicOpen (X.presheaf.map (homOfLE le_sup_left).op f) ≤ _))
    (homOfLE (_ : X.basicOpen (X.presheaf.map (homOfLE le_sup_right).op f) ≤ _)) _ _ _ _ _
[GOAL]
case h.refine'_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f
[PROOFSTEP]
rw [X.basicOpen_res]
[GOAL]
case h.refine'_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ S ⊓ Scheme.basicOpen X f ≤ Scheme.basicOpen X f
[PROOFSTEP]
exact inf_le_right
[GOAL]
case h.refine'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f
[PROOFSTEP]
rw [X.basicOpen_res]
[GOAL]
case h.refine'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑U ⊓ Scheme.basicOpen X f ≤ Scheme.basicOpen X f
[PROOFSTEP]
exact inf_le_right
[GOAL]
case h.refine'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ Scheme.basicOpen X f ≤
    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ⊔
      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)
[PROOFSTEP]
rw [X.basicOpen_res, X.basicOpen_res]
[GOAL]
case h.refine'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ Scheme.basicOpen X f ≤ S ⊓ Scheme.basicOpen X f ⊔ ↑U ⊓ Scheme.basicOpen X f
[PROOFSTEP]
erw [← inf_sup_right]
[GOAL]
case h.refine'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ Scheme.basicOpen X f ≤ (S ⊔ ↑U) ⊓ Scheme.basicOpen X f
[PROOFSTEP]
refine' le_inf_iff.mpr ⟨X.basicOpen_le f, le_of_eq rfl⟩
[GOAL]
case h.refine'_4
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑((Scheme.sheaf X).val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    ↑((Scheme.sheaf X).val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          (Finset.sup Finset.univ n + n₁ + n₂) *
        x)
[PROOFSTEP]
convert
  congr_arg
    (X.presheaf.map
      (homOfLE (by restrict_tac : X.basicOpen (X.presheaf.map (homOfLE (le_sup_left : S ≤ S ⊔ U.1)).op f) ≤ S)).op)
    (X.sheaf.objSupIsoProdEqLocus_inv_fst S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using
  1
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ S
[PROOFSTEP]
restrict_tac
[GOAL]
case h.e'_2.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑((Scheme.sheaf X).val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      (↑((Scheme.sheaf X).val.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this }))
[PROOFSTEP]
delta Scheme.sheaf SheafedSpace.sheaf
[GOAL]
case h.e'_2.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑({ val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) }.val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
                ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      (↑({ val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) }.val.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
                ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this }))
[PROOFSTEP]
simp only
[GOAL]
case h.e'_2.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑(X.presheaf.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
                ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
                ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this }))
[PROOFSTEP]
erw [← comp_apply, ← comp_apply, ← comp_apply, ← comp_apply]
[GOAL]
case h.e'_2.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑((TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
              ↑U).inv ≫
          X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op ≫
            X.presheaf.map
              (homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      {
        val :=
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
            ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
        property := this } =
    ↑((TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
              ↑U).inv ≫
          X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op ≫
            X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      {
        val :=
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
            ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
        property := this }
[PROOFSTEP]
simp only [← Functor.map_comp, ← op_comp]
[GOAL]
case h.e'_2.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑((TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
              ↑U).inv ≫
          X.presheaf.map
            (homOfLE
                  (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
      {
        val :=
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
            ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
        property := this } =
    ↑((TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
              ↑U).inv ≫
          X.presheaf.map
            (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S) ≫
                homOfLE (_ : S ≤ S ⊔ ↑U)).op)
      {
        val :=
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
            ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
        property := this }
[PROOFSTEP]
congr 1
[GOAL]
case h.e'_3.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑((Scheme.sheaf X).val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          (Finset.sup Finset.univ n + n₁ + n₂) *
        x) =
    ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      (↑{
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this }).fst
[PROOFSTEP]
delta Scheme.sheaf SheafedSpace.sheaf
[GOAL]
case h.e'_3.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑({ val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) }.val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          (Finset.sup Finset.univ n + n₁ + n₂) *
        x) =
    ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      (↑{
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this }).fst
[PROOFSTEP]
simp only [map_pow, map_mul]
[GOAL]
case h.e'_3.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
          (↑(X.presheaf.map
                (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f) ^
        (Finset.sup Finset.univ n + n₁ + n₂) *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        (Finset.sup Finset.univ n + n₂) *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                    a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
        y₁
[PROOFSTEP]
erw [← comp_apply, ← comp_apply]
[GOAL]
case h.e'_3.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op ≫
              X.presheaf.map
                (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤
                        Scheme.basicOpen X f)).op)
          f ^
        (Finset.sup Finset.univ n + n₁ + n₂) *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x =
    ↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op ≫
              X.presheaf.map
                (homOfLE
                    (_ :
                      ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                        a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          f ^
        (Finset.sup Finset.univ n + n₂) *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                    a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
        y₁
[PROOFSTEP]
simp only [← Functor.map_comp, ← op_comp, mul_assoc, pow_add]
[GOAL]
case h.e'_3.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                  homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
          f ^
        Finset.sup Finset.univ n *
      (↑(X.presheaf.map
                (homOfLE
                      (_ :
                        Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                    homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n₁ *
        (↑(X.presheaf.map
                  (homOfLE
                        (_ :
                          Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤
                            Scheme.basicOpen X f) ≫
                      homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
              f ^
            n₂ *
          ↑(X.presheaf.map
                (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤
                        Scheme.basicOpen X f)).op)
            x)) =
    ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                        a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S) ≫
                  homOfLE (_ : S ≤ S ⊔ ↑U)).op)
          f ^
        Finset.sup Finset.univ n *
      (↑(X.presheaf.map
                (homOfLE
                      (_ :
                        ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                          a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S) ≫
                    homOfLE (_ : S ≤ S ⊔ ↑U)).op)
            f ^
          n₂ *
        ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          y₁)
[PROOFSTEP]
erw [hy₁]
[GOAL]
case h.e'_3.h
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                  homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
          f ^
        Finset.sup Finset.univ n *
      (↑(X.presheaf.map
                (homOfLE
                      (_ :
                        Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                    homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n₁ *
        (↑(X.presheaf.map
                  (homOfLE
                        (_ :
                          Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤
                            Scheme.basicOpen X f) ≫
                      homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
              f ^
            n₂ *
          ↑(X.presheaf.map
                (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤
                        Scheme.basicOpen X f)).op)
            x)) =
    ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                        a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S) ≫
                  homOfLE (_ : S ≤ S ⊔ ↑U)).op)
          f ^
        Finset.sup Finset.univ n *
      (↑(X.presheaf.map
                (homOfLE
                      (_ :
                        ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                          a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S) ≫
                    homOfLE (_ : S ≤ S ⊔ ↑U)).op)
            f ^
          n₂ *
        (↑(X.presheaf.map
                  (homOfLE
                      (_ :
                        ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                          a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
            n₁ *
          ↑(X.presheaf.map
                (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤
                        Scheme.basicOpen X f)).op)
            x))
[PROOFSTEP]
congr 1
[GOAL]
case h.e'_3.h.e_a
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                  homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
          f ^
        n₁ *
      (↑(X.presheaf.map
                (homOfLE
                      (_ :
                        Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                    homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n₂ *
        ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
          x) =
    ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                        a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S) ≫
                  homOfLE (_ : S ≤ S ⊔ ↑U)).op)
          f ^
        n₂ *
      (↑(X.presheaf.map
                (homOfLE
                    (_ :
                      ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                        a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
            (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
          n₁ *
        ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
          x)
[PROOFSTEP]
rw [← mul_assoc, ← mul_assoc]
[GOAL]
case h.e'_3.h.e_a
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑(X.presheaf.map
                (homOfLE
                      (_ :
                        Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                    homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n₁ *
        ↑(X.presheaf.map
                (homOfLE
                      (_ :
                        Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                    homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x =
    ↑(X.presheaf.map
                (homOfLE
                      (_ :
                        ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                          a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S) ≫
                    homOfLE (_ : S ≤ S ⊔ ↑U)).op)
            f ^
          n₂ *
        ↑(X.presheaf.map
                (homOfLE
                    (_ :
                      ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                        a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
            (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
          n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
[PROOFSTEP]
congr 1
[GOAL]
case h.e'_3.h.e_a.e_a
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                  homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
          f ^
        n₁ *
      ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                  homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
          f ^
        n₂ =
    ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                        a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S) ≫
                  homOfLE (_ : S ≤ S ⊔ ↑U)).op)
          f ^
        n₂ *
      ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁
[PROOFSTEP]
rw [mul_comm, ← comp_apply, ← Functor.map_comp]
[GOAL]
case h.e'_3.h.e_a.e_a
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
e_1✝ :
  (fun x =>
        (forget CommRingCat).obj
          ((Scheme.sheaf X).val.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)))))
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    (forget CommRingCat).obj
      (X.presheaf.obj (op (Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f))))
⊢ ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                  homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
          f ^
        n₂ *
      ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                  homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
          f ^
        n₁ =
    ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                        a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S) ≫
                  homOfLE (_ : S ≤ S ⊔ ↑U)).op)
          f ^
        n₂ *
      ↑(X.presheaf.map
              ((homOfLE (_ : S ≤ S ⊔ ↑U)).op ≫
                (homOfLE
                    (_ :
                      ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                        a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op))
          f ^
        n₁
[PROOFSTEP]
congr 1
[GOAL]
case h.refine'_5
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑((Scheme.sheaf X).val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    ↑((Scheme.sheaf X).val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          (Finset.sup Finset.univ n + n₁ + n₂) *
        x)
[PROOFSTEP]
convert
  congr_arg (X.presheaf.map (homOfLE _).op) (X.sheaf.objSupIsoProdEqLocus_inv_snd S U.1 ⟨⟨_ * _, _ * _⟩, this⟩) using 1
[GOAL]
case h.e'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑((Scheme.sheaf X).val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    ↑(X.presheaf.map (homOfLE ?h.refine'_5.convert_1).op)
      (↑((Scheme.sheaf X).val.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this }))
case h.e'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑((Scheme.sheaf X).val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          (Finset.sup Finset.univ n + n₁ + n₂) *
        x) =
    ↑(X.presheaf.map (homOfLE ?h.refine'_5.convert_1).op)
      (↑{
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this }).snd
case h.refine'_5.convert_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U
[PROOFSTEP]
pick_goal 3
[GOAL]
case h.refine'_5.convert_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U
[PROOFSTEP]
rw [X.basicOpen_res]
[GOAL]
case h.refine'_5.convert_1
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑U ⊓ Scheme.basicOpen X f ≤ ↑U
[PROOFSTEP]
restrict_tac
[GOAL]
case h.e'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑((Scheme.sheaf X).val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U)).op)
      (↑((Scheme.sheaf X).val.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus (Scheme.sheaf X) S ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this }))
[PROOFSTEP]
delta Scheme.sheaf SheafedSpace.sheaf
[GOAL]
case h.e'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑({ val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) }.val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
                ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U)).op)
      (↑({ val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) }.val.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
                ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this }))
[PROOFSTEP]
simp only
[GOAL]
case h.e'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑(X.presheaf.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
                ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this })) =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
        (↑(TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
                ↑U).inv
          {
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this }))
[PROOFSTEP]
erw [← comp_apply, ← comp_apply, ← comp_apply, ← comp_apply]
[GOAL]
case h.e'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑((TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
              ↑U).inv ≫
          X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op ≫
            X.presheaf.map
              (homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      {
        val :=
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
            ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
        property := this } =
    ↑((TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
              ↑U).inv ≫
          X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op ≫
            X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U)).op)
      {
        val :=
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
            ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
        property := this }
[PROOFSTEP]
simp only [← Functor.map_comp, ← op_comp]
[GOAL]
case h.e'_2
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑((TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
              ↑U).inv ≫
          X.presheaf.map
            (homOfLE
                  (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
      {
        val :=
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
            ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
        property := this } =
    ↑((TopCat.Sheaf.objSupIsoProdEqLocus { val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) } S
              ↑U).inv ≫
          X.presheaf.map
            (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U) ≫
                homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
      {
        val :=
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
            ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
        property := this }
[PROOFSTEP]
congr 1
[GOAL]
case h.e'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑((Scheme.sheaf X).val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          (Finset.sup Finset.univ n + n₁ + n₂) *
        x) =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U)).op)
      (↑{
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this }).snd
[PROOFSTEP]
delta Scheme.sheaf SheafedSpace.sheaf
[GOAL]
case h.e'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑({ val := X.presheaf, cond := (_ : TopCat.Presheaf.IsSheaf X.presheaf) }.val.map
          (homOfLE
              (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
      (↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          (Finset.sup Finset.univ n + n₁ + n₂) *
        x) =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U)).op)
      (↑{
            val :=
              (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁,
                ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂),
            property := this }).snd
[PROOFSTEP]
simp only [map_pow, map_mul]
[GOAL]
case h.e'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
          (↑(X.presheaf.map
                (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f) ^
        (Finset.sup Finset.univ n + n₁ + n₂) *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x =
    ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        (Finset.sup Finset.univ n + n₁) *
      ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U)).op)
        y₂
[PROOFSTEP]
erw [← comp_apply, ← comp_apply]
[GOAL]
case h.e'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op ≫
              X.presheaf.map
                (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤
                        Scheme.basicOpen X f)).op)
          f ^
        (Finset.sup Finset.univ n + n₁ + n₂) *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x =
    ↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op ≫
              X.presheaf.map
                (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U)).op)
          f ^
        (Finset.sup Finset.univ n + n₁) *
      ↑(X.presheaf.map (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U)).op)
        y₂
[PROOFSTEP]
simp only [← Functor.map_comp, ← op_comp, mul_assoc, pow_add]
[GOAL]
case h.e'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                  homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
          f ^
        Finset.sup Finset.univ n *
      (↑(X.presheaf.map
                (homOfLE
                      (_ :
                        Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤
                          Scheme.basicOpen X f) ≫
                    homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n₁ *
        (↑(X.presheaf.map
                  (homOfLE
                        (_ :
                          Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤
                            Scheme.basicOpen X f) ≫
                      homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
              f ^
            n₂ *
          ↑(X.presheaf.map
                (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤
                        Scheme.basicOpen X f)).op)
            x)) =
    ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U) ≫
                  homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
          f ^
        Finset.sup Finset.univ n *
      (↑(X.presheaf.map
                (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U) ≫
                    homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
            f ^
          n₁ *
        ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U)).op)
          y₂)
[PROOFSTEP]
erw [hy₂]
[GOAL]
case h.e'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                  homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
          f ^
        Finset.sup Finset.univ n *
      (↑(X.presheaf.map
                (homOfLE
                      (_ :
                        Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤
                          Scheme.basicOpen X f) ≫
                    homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n₁ *
        (↑(X.presheaf.map
                  (homOfLE
                        (_ :
                          Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤
                            Scheme.basicOpen X f) ≫
                      homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
              f ^
            n₂ *
          ↑(X.presheaf.map
                (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤
                        Scheme.basicOpen X f)).op)
            x)) =
    ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U) ≫
                  homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
          f ^
        Finset.sup Finset.univ n *
      (↑(X.presheaf.map
                (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U) ≫
                    homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
            f ^
          n₁ *
        (↑(X.presheaf.map
                  (homOfLE
                      (_ :
                        ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                          a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
              (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
            n₂ *
          ↑(X.presheaf.map
                (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤
                        Scheme.basicOpen X f)).op)
            x))
[PROOFSTEP]
rw [← comp_apply, ← Functor.map_comp]
[GOAL]
case h.e'_3
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U✝ : Opens ↑↑X.toPresheafedSpace
hU✝ : IsCompact U✝.carrier
S : Opens ↑↑X.toPresheafedSpace
hS : IsCompact S.carrier
U : ↑(Scheme.affineOpens X)
hU :
  IsQuasiSeparated S.carrier →
    ∀ (f : ↑(X.presheaf.obj (op S))) (x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
      ∃ n y,
        ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) y =
          ↑(X.presheaf.map (homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑S)).op) f ^
              n *
            x
hSU : IsQuasiSeparated (S ⊔ ↑U).carrier
f : ↑(X.presheaf.obj (op (S ⊔ ↑U)))
x : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n₁ : ℕ
y₁ : ↑(X.presheaf.obj (op S))
hy₁ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
      y₁ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑S)).op)
          (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ^
        n₁ *
      ↑(X.presheaf.map
            (homOfLE
                (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
n₂ : ℕ
y₂ : ↑(X.presheaf.obj (op ↑U))
hy₂ :
  ↑(X.presheaf.map
          (homOfLE
              (_ :
                ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                  a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
      y₂ =
    ↑(X.presheaf.map
              (homOfLE
                  (_ :
                    ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                      a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) → a ∈ ↑↑U)).op)
          (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ^
        n₂ *
      ↑(X.presheaf.map
            (homOfLE
                (_ :
                  Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f)).op)
        x
s : Set ↑(Scheme.affineOpens X)
hs' : Set.Finite s
this✝ : Finite ↑s
val✝ : Fintype ↑s
hs : S ⊓ ↑U = ⨆ (i : ↑s), ↑↑i
hs₁ : ∀ (i : ↑s), ↑↑i ≤ S
hs₂ : ∀ (i : ↑s), ↑↑i ≤ ↑U
n : ↑s → ℕ
hn :
  ∀ (i : ↑s),
    ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ S)).op) (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (n i + n₂) * y₁) =
      ↑(X.presheaf.map (homOfLE (_ : ↑↑i ≤ ↑U)).op)
        (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (n i + n₁) * y₂)
this :
  ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ S)).op)
      (↑(X.presheaf.map (homOfLE (_ : S ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₂) * y₁) =
    ↑(X.presheaf.map (homOfLE (_ : S ⊓ ↑U ≤ ↑U)).op)
      (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f ^ (Finset.sup Finset.univ n + n₁) * y₂)
⊢ ↑(X.presheaf.map
              (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ Scheme.basicOpen X f) ≫
                  homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
          f ^
        Finset.sup Finset.univ n *
      (↑(X.presheaf.map
                (homOfLE
                      (_ :
                        Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤
                          Scheme.basicOpen X f) ≫
                    homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
            f ^
          n₁ *
        (↑(X.presheaf.map
                  (homOfLE
                        (_ :
                          Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤
                            Scheme.basicOpen X f) ≫
                      homOfLE (_ : ∀ ⦃a : ↑↑X.toPresheafedSpace⦄, a ∈ ↑(Scheme.basicOpen X f) → a ∈ ↑(S ⊔ ↑U))).op)
              f ^
            n₂ *
          ↑(X.presheaf.map
                (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤
                        Scheme.basicOpen X f)).op)
            x)) =
    ↑(X.presheaf.map
              (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U) ≫
                  homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
          f ^
        Finset.sup Finset.univ n *
      (↑(X.presheaf.map
                (homOfLE (_ : Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤ ↑U) ≫
                    homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op)
            f ^
          n₁ *
        (↑(X.presheaf.map
                  ((homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op ≫
                    (homOfLE
                        (_ :
                          ∀ ⦃a : ↑↑X.toPresheafedSpace⦄,
                            a ∈ ↑(Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f)) →
                              a ∈ ↑↑U)).op))
              f ^
            n₂ *
          ↑(X.presheaf.map
                (homOfLE
                    (_ :
                      Scheme.basicOpen X (↑(X.presheaf.map (homOfLE (_ : ↑U ≤ S ⊔ ↑U)).op) f) ≤
                        Scheme.basicOpen X f)).op)
            x))
[PROOFSTEP]
congr 1
[GOAL]
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f : ↑(X.presheaf.obj (op U))
⊢ IsLocalization.Away f ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
[PROOFSTEP]
constructor
[GOAL]
case map_units'
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f : ↑(X.presheaf.obj (op U))
⊢ ∀ (y : { x // x ∈ Submonoid.powers f }),
    IsUnit (↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) ↑y)
[PROOFSTEP]
rintro ⟨_, n, rfl⟩
[GOAL]
case map_units'.mk.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f : ↑(X.presheaf.obj (op U))
n : ℕ
⊢ IsUnit
    (↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f))))
      ↑{ val := (fun x x_1 => x ^ x_1) f n,
          property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n) })
[PROOFSTEP]
simp only [map_pow, Subtype.coe_mk, RingHom.algebraMap_toAlgebra]
[GOAL]
case map_units'.mk.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f : ↑(X.presheaf.obj (op U))
n : ℕ
⊢ IsUnit (↑(X.presheaf.map (homOfLE (_ : RingedSpace.basicOpen X.toSheafedSpace f ≤ U)).op) f ^ n)
[PROOFSTEP]
exact IsUnit.pow _ (RingedSpace.isUnit_res_basicOpen _ f)
[GOAL]
case surj'
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f : ↑(X.presheaf.obj (op U))
⊢ ∀ (z : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))),
    ∃ x,
      z * ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) ↑x.snd =
        ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) x.fst
[PROOFSTEP]
intro z
[GOAL]
case surj'
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f : ↑(X.presheaf.obj (op U))
z : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
⊢ ∃ x,
    z * ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) ↑x.snd =
      ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) x.fst
[PROOFSTEP]
obtain ⟨n, y, e⟩ := exists_eq_pow_mul_of_isCompact_of_isQuasiSeparated X U hU hU' f z
[GOAL]
case surj'.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f : ↑(X.presheaf.obj (op U))
z : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n : ℕ
y : ↑(X.presheaf.obj (op U))
e : y |_ Scheme.basicOpen X f = (f |_ Scheme.basicOpen X f) ^ n * z
⊢ ∃ x,
    z * ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) ↑x.snd =
      ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) x.fst
[PROOFSTEP]
refine' ⟨⟨y, _, n, rfl⟩, _⟩
[GOAL]
case surj'.intro.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f : ↑(X.presheaf.obj (op U))
z : ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))
n : ℕ
y : ↑(X.presheaf.obj (op U))
e : y |_ Scheme.basicOpen X f = (f |_ Scheme.basicOpen X f) ^ n * z
⊢ z *
      ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f))))
        ↑(y,
              { val := (fun x x_1 => x ^ x_1) f n,
                property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n) }).snd =
    ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f))))
      (y,
          { val := (fun x x_1 => x ^ x_1) f n,
            property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n) }).fst
[PROOFSTEP]
simpa only [map_pow, Subtype.coe_mk, RingHom.algebraMap_toAlgebra, mul_comm z] using e.symm
[GOAL]
case eq_iff_exists'
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f : ↑(X.presheaf.obj (op U))
⊢ ∀ {x y : ↑(X.presheaf.obj (op U))},
    ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) x =
        ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) y ↔
      ∃ c, ↑c * x = ↑c * y
[PROOFSTEP]
intro x y
[GOAL]
case eq_iff_exists'
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f x y : ↑(X.presheaf.obj (op U))
⊢ ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) x =
      ↑(algebraMap ↑(X.presheaf.obj (op U)) ↑(X.presheaf.obj (op (Scheme.basicOpen X f)))) y ↔
    ∃ c, ↑c * x = ↑c * y
[PROOFSTEP]
rw [← sub_eq_zero, ← map_sub, RingHom.algebraMap_toAlgebra]
[GOAL]
case eq_iff_exists'
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f x y : ↑(X.presheaf.obj (op U))
⊢ ↑(X.presheaf.map (homOfLE (_ : RingedSpace.basicOpen X.toSheafedSpace f ≤ U)).op) (x - y) = 0 ↔ ∃ c, ↑c * x = ↑c * y
[PROOFSTEP]
simp_rw [← @sub_eq_zero _ _ (_ * x) (_ * y), ← mul_sub]
[GOAL]
case eq_iff_exists'
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f x y : ↑(X.presheaf.obj (op U))
⊢ ↑(X.presheaf.map (homOfLE (_ : RingedSpace.basicOpen X.toSheafedSpace f ≤ U)).op) (x - y) = 0 ↔ ∃ c, ↑c * (x - y) = 0
[PROOFSTEP]
generalize x - y = z
[GOAL]
case eq_iff_exists'
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f x y z : ↑(X.presheaf.obj (op U))
⊢ ↑(X.presheaf.map (homOfLE (_ : RingedSpace.basicOpen X.toSheafedSpace f ≤ U)).op) z = 0 ↔ ∃ c, ↑c * z = 0
[PROOFSTEP]
constructor
[GOAL]
case eq_iff_exists'.mp
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f x y z : ↑(X.presheaf.obj (op U))
⊢ ↑(X.presheaf.map (homOfLE (_ : RingedSpace.basicOpen X.toSheafedSpace f ≤ U)).op) z = 0 → ∃ c, ↑c * z = 0
[PROOFSTEP]
intro H
[GOAL]
case eq_iff_exists'.mp
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f x y z : ↑(X.presheaf.obj (op U))
H : ↑(X.presheaf.map (homOfLE (_ : RingedSpace.basicOpen X.toSheafedSpace f ≤ U)).op) z = 0
⊢ ∃ c, ↑c * z = 0
[PROOFSTEP]
obtain ⟨n, e⟩ := exists_pow_mul_eq_zero_of_res_basicOpen_eq_zero_of_isCompact X hU _ _ H
[GOAL]
case eq_iff_exists'.mp.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f x y z : ↑(X.presheaf.obj (op U))
H : ↑(X.presheaf.map (homOfLE (_ : RingedSpace.basicOpen X.toSheafedSpace f ≤ U)).op) z = 0
n : ℕ
e : f ^ n * z = 0
⊢ ∃ c, ↑c * z = 0
[PROOFSTEP]
refine' ⟨⟨_, n, rfl⟩, _⟩
[GOAL]
case eq_iff_exists'.mp.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f x y z : ↑(X.presheaf.obj (op U))
H : ↑(X.presheaf.map (homOfLE (_ : RingedSpace.basicOpen X.toSheafedSpace f ≤ U)).op) z = 0
n : ℕ
e : f ^ n * z = 0
⊢ ↑{ val := (fun x x_1 => x ^ x_1) f n,
          property := (_ : ∃ y, (fun x x_1 => x ^ x_1) f y = (fun x x_1 => x ^ x_1) f n) } *
      z =
    0
[PROOFSTEP]
simpa [mul_comm z] using e
[GOAL]
case eq_iff_exists'.mpr
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f x y z : ↑(X.presheaf.obj (op U))
⊢ (∃ c, ↑c * z = 0) → ↑(X.presheaf.map (homOfLE (_ : RingedSpace.basicOpen X.toSheafedSpace f ≤ U)).op) z = 0
[PROOFSTEP]
rintro ⟨⟨_, n, rfl⟩, e : f ^ n * z = 0⟩
[GOAL]
case eq_iff_exists'.mpr.intro.mk.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f x y z : ↑(X.presheaf.obj (op U))
n : ℕ
e : f ^ n * z = 0
⊢ ↑(X.presheaf.map (homOfLE (_ : RingedSpace.basicOpen X.toSheafedSpace f ≤ U)).op) z = 0
[PROOFSTEP]
rw [← ((RingedSpace.isUnit_res_basicOpen _ f).pow n).mul_right_inj, mul_zero, ← map_pow]
  -- Porting note: this one lemma needs `erw`
[GOAL]
case eq_iff_exists'.mpr.intro.mk.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f x y z : ↑(X.presheaf.obj (op U))
n : ℕ
e : f ^ n * z = 0
⊢ ↑(X.presheaf.map (homOfLE (_ : RingedSpace.basicOpen X.toSheafedSpace f ≤ U)).op) (f ^ n) *
      ↑(X.presheaf.map (homOfLE (_ : RingedSpace.basicOpen X.toSheafedSpace f ≤ U)).op) z =
    0
[PROOFSTEP]
erw [← map_mul]
[GOAL]
case eq_iff_exists'.mpr.intro.mk.intro
X✝ Y : Scheme
f✝ : X✝ ⟶ Y
X : Scheme
U : Opens ↑↑X.toPresheafedSpace
hU : IsCompact U.carrier
hU' : IsQuasiSeparated U.carrier
f x y z : ↑(X.presheaf.obj (op U))
n : ℕ
e : f ^ n * z = 0
⊢ ↑(X.presheaf.map (homOfLE (_ : RingedSpace.basicOpen X.toSheafedSpace f ≤ U)).op) (f ^ n * z) = 0
[PROOFSTEP]
rw [e, map_zero]