-- Mathlib/AlgebraicGeometry/Morphisms/RingHomProperties.lean
lemma isStableUnderBaseChange (hP : RingHom.IsStableUnderBaseChange Q) :
    P.IsStableUnderBaseChange

Proof state:
case hP'.H
P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝² : HasRingHomProperty P Q
hP : RingHom.IsStableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Q
this : (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).IsLocal :=
  HasAffineProperty.isLocal_affineProperty P
X Y S : Scheme
inst✝¹ : IsAffine S
inst✝ : IsAffine X
f : X ⟶ S
g : Y ⟶ S
H : P g
⊢ P (pullback.fst f g)

Tactic:
wlog hX : IsAffine Y generalizing Y

Result:
case hP'.H.inr
P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝² : HasRingHomProperty P Q
hP : RingHom.IsStableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Q
this✝ : (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).IsLocal :=
  HasAffineProperty.isLocal_affineProperty P
X Y S : Scheme
inst✝¹ : IsAffine S
inst✝ : IsAffine X
f : X ⟶ S
g : Y ⟶ S
H : P g
this : ∀ ⦃Y : Scheme⦄ (g : Y ⟶ S), P g → IsAffine Y → P (pullback.fst f g)
hX : ¬IsAffine Y
⊢ P (pullback.fst f g)

P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝² : HasRingHomProperty P Q
hP : RingHom.IsStableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Q
this : (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).IsLocal :=
  HasAffineProperty.isLocal_affineProperty P
X S : Scheme
inst✝¹ : IsAffine S
inst✝ : IsAffine X
f : X ⟶ S
Y : Scheme
g : Y ⟶ S
H : P g
hX : IsAffine Y
⊢ P (pullback.fst f g)

Proof state:
case hP'.H.inr
P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝² : HasRingHomProperty P Q
hP : RingHom.IsStableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Q
this✝ : (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).IsLocal :=
  HasAffineProperty.isLocal_affineProperty P
X Y S : Scheme
inst✝¹ : IsAffine S
inst✝ : IsAffine X
f : X ⟶ S
g : Y ⟶ S
H : P g
this : ∀ ⦃Y : Scheme⦄ (g : Y ⟶ S), P g → IsAffine Y → P (pullback.fst f g)
hX : ¬IsAffine Y
i : (Scheme.Pullback.openCoverOfRight Y.affineCover f g).J
⊢ P ((Scheme.Pullback.openCoverOfRight Y.affineCover f g).map i ≫ pullback.fst f g)

Tactic:
simp only [Scheme.Pullback.openCoverOfRight_obj, Scheme.Pullback.openCoverOfRight_map,
  limit.lift_π, PullbackCone.mk_pt, PullbackCone.mk_π_app, Category.comp_id]

Result:
case hP'.H.inr
P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝² : HasRingHomProperty P Q
hP : RingHom.IsStableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Q
this✝ : (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).IsLocal :=
  HasAffineProperty.isLocal_affineProperty P
X Y S : Scheme
inst✝¹ : IsAffine S
inst✝ : IsAffine X
f : X ⟶ S
g : Y ⟶ S
H : P g
this : ∀ ⦃Y : Scheme⦄ (g : Y ⟶ S), P g → IsAffine Y → P (pullback.fst f g)
hX : ¬IsAffine Y
i : (Scheme.Pullback.openCoverOfRight Y.affineCover f g).J
⊢ P (pullback.fst f (Y.affineCover.map i ≫ g))

Proof state:
case hP'
P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝ : HasRingHomProperty P Q
hP : RingHom.IsStableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Q
this : (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).IsLocal :=
  HasAffineProperty.isLocal_affineProperty P
⊢ (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).IsStableUnderBaseChange

Tactic:
apply AffineTargetMorphismProperty.IsStableUnderBaseChange.mk

Result:
case hP'.H
P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝ : HasRingHomProperty P Q
hP : RingHom.IsStableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Q
this : (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).IsLocal :=
  HasAffineProperty.isLocal_affineProperty P
⊢ ∀ ⦃X Y S : Scheme⦄ [inst : IsAffine S] [inst_1 : IsAffine X] (f : X ⟶ S) (g : Y ⟶ S),
    sourceAffineLocally (fun {R S} [CommRing R] [CommRing S] => Q) g →
      sourceAffineLocally (fun {R S} [CommRing R] [CommRing S] => Q) (pullback.fst f g)

Proof state:
case hP'
P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝ : HasRingHomProperty P Q
hP : RingHom.IsStableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Q
⊢ (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).IsStableUnderBaseChange

Tactic:
letI := HasAffineProperty.isLocal_affineProperty P

Result:
case hP'
P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝ : HasRingHomProperty P Q
hP : RingHom.IsStableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Q
this : (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).IsLocal :=
  HasAffineProperty.isLocal_affineProperty P
⊢ (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).IsStableUnderBaseChange

Proof state:
case hP'.H.inr
P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝² : HasRingHomProperty P Q
hP : RingHom.IsStableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Q
this✝ : (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).IsLocal :=
  HasAffineProperty.isLocal_affineProperty P
X Y S : Scheme
inst✝¹ : IsAffine S
inst✝ : IsAffine X
f : X ⟶ S
g : Y ⟶ S
H : P g
this : ∀ ⦃Y : Scheme⦄ (g : Y ⟶ S), P g → IsAffine Y → P (pullback.fst f g)
hX : ¬IsAffine Y
i : (Scheme.Pullback.openCoverOfRight Y.affineCover f g).J
⊢ P (pullback.fst f (Y.affineCover.map i ≫ g))

Tactic:
apply this _ (comp_of_isOpenImmersion _ _ _ H) inferInstance

Result:
no goals