theorem isOpenImmersionCat_comp_of_sourceAffineLocally (h₁ : RingHom.RespectsIso @P)
    {X Y Z : Scheme} [IsAffine X] [IsAffine Z] (f : X ⟶ Y) [IsOpenImmersion f] (g : Y ⟶ Z)
    (h₂ : sourceAffineLocally (@P) g) : P (Scheme.Γ.map (f ≫ g).op) := by
  rw [← h₁.cancel_right_isIso _
    (Scheme.Γ.map (IsOpenImmersion.isoOfRangeEq (Y.ofRestrict _) f _).hom.op),
    ← Functor.map_comp, ← op_comp]
  

Proof state:
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : RingHom.PropertyIsLocal P
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
inst✝² : IsAffine X
inst✝¹ : IsAffine Z
f : X ⟶ Y
inst✝ : IsOpenImmersion f
g : Y ⟶ Z
h₂ : sourceAffineLocally P g
⊢ P (Scheme.Γ.map ((IsOpenImmersion.isoOfRangeEq (Scheme.ofRestrict Y ?m.124804) f ?m.124811).hom ≫ f ≫ g).op)
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : RingHom.PropertyIsLocal P
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
inst✝² : IsAffine X
inst✝¹ : IsAffine Z
f : X ⟶ Y
inst✝ : IsOpenImmersion f
g : Y ⟶ Z
h₂ : sourceAffineLocally P g
⊢ TopCat
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : RingHom.PropertyIsLocal P
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
inst✝² : IsAffine X
inst✝¹ : IsAffine Z
f : X ⟶ Y
inst✝ : IsOpenImmersion f
g : Y ⟶ Z
h₂ : sourceAffineLocally P g
⊢ ?m.124802 ⟶ TopCat.of ↑↑Y.toPresheafedSpace
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : RingHom.PropertyIsLocal P
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
inst✝² : IsAffine X
inst✝¹ : IsAffine Z
f : X ⟶ Y
inst✝ : IsOpenImmersion f
g : Y ⟶ Z
h₂ : sourceAffineLocally P g
⊢ OpenEmbedding ⇑?m.124803
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : RingHom.PropertyIsLocal P
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
inst✝² : IsAffine X
inst✝¹ : IsAffine Z
f : X ⟶ Y
inst✝ : IsOpenImmersion f
g : Y ⟶ Z
h₂ : sourceAffineLocally P g
⊢ Set.range ⇑(Scheme.ofRestrict Y ?m.124804).val.base = Set.range ⇑f.val.base
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : RingHom.PropertyIsLocal P
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
inst✝² : IsAffine X
inst✝¹ : IsAffine Z
f : X ⟶ Y
inst✝ : IsOpenImmersion f
g : Y ⟶ Z
h₂ : sourceAffineLocally P g
⊢ TopCat
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : RingHom.PropertyIsLocal P
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
inst✝² : IsAffine X
inst✝¹ : IsAffine Z
f : X ⟶ Y
inst✝ : IsOpenImmersion f
g : Y ⟶ Z
h₂ : sourceAffineLocally P g
⊢ ?m.124802 ⟶ TopCat.of ↑↑Y.toPresheafedSpace
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : RingHom.PropertyIsLocal P
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
inst✝² : IsAffine X
inst✝¹ : IsAffine Z
f : X ⟶ Y
inst✝ : IsOpenImmersion f
g : Y ⟶ Z
h₂ : sourceAffineLocally P g
⊢ OpenEmbedding ⇑?m.124803
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : RingHom.PropertyIsLocal P
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
inst✝² : IsAffine X
inst✝¹ : IsAffine Z
f : X ⟶ Y
inst✝ : IsOpenImmersion f
g : Y ⟶ Z
h₂ : sourceAffineLocally P g
⊢ Set.range ⇑(Scheme.ofRestrict Y ?m.124804).val.base = Set.range ⇑f.val.base
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : RingHom.PropertyIsLocal P
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
inst✝² : IsAffine X
inst✝¹ : IsAffine Z
f : X ⟶ Y
inst✝ : IsOpenImmersion f
g : Y ⟶ Z
h₂ : sourceAffineLocally P g
⊢ TopCat
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : RingHom.PropertyIsLocal P
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
inst✝² : IsAffine X
inst✝¹ : IsAffine Z
f : X ⟶ Y
inst✝ : IsOpenImmersion f
g : Y ⟶ Z
h₂ : sourceAffineLocally P g
⊢ ?m.124802 ⟶ TopCat.of ↑↑Y.toPresheafedSpace
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : RingHom.PropertyIsLocal P
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
inst✝² : IsAffine X
inst✝¹ : IsAffine Z
f : X ⟶ Y
inst✝ : IsOpenImmersion f
g : Y ⟶ Z
h₂ : sourceAffineLocally P g
⊢ OpenEmbedding ⇑?m.124803
P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : RingHom.PropertyIsLocal P
h₁ : RingHom.RespectsIso P
X Y Z : Scheme
inst✝² : IsAffine X
inst✝¹ : IsAffine Z
f : X ⟶ Y
inst✝ : IsOpenImmersion f
g : Y ⟶ Z
h₂ : sourceAffineLocally P g
⊢ Set.range ⇑(Scheme.ofRestrict Y ?m.124804).val.base = Set.range ⇑f.val.base

Next tactic:
convert h₂ ⟨_, rangeIsAffineOpenOfOpenImmersion f⟩ using 3