Theorem: AlgebraicGeometry.HasRingHomProperty.stableUnderBaseChange
File: Mathlib/AlgebraicGeometry/Morphisms/RingHomProperties.lean

Proof steps:
state_before: P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝ : HasRingHomProperty P Q
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
hP : RingHom.StableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Q
⊢ P.StableUnderBaseChange
state_after: case hP'
P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝ : HasRingHomProperty P Q
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
hP : RingHom.StableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Q
⊢ (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).StableUnderBaseChange
tactic: apply HasAffineProperty.stableUnderBaseChange
state_before: case hP'
P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝ : HasRingHomProperty P Q
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
hP : RingHom.StableUnderBaseChange fun {R S} [CommRing R] [CommRing S] => Q
⊢ (sourceAffineLocally fun {R S} [CommRing R] [CommRing S] => Q).StableUnderBaseChange
state_after: case hP'
P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝ : HasRingHomProperty P Q
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
hP : RingHom.StableUnderBaseChange 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).StableUnderBaseChange
tactic: letI := HasAffineProperty.isLocal_affineProperty P
state_before: case hP'
P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝ : HasRingHomProperty P Q
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
hP : RingHom.StableUnderBaseChange 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).StableUnderBaseChange
state_after: 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
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
hP : RingHom.StableUnderBaseChange 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)
tactic: apply AffineTargetMorphismProperty.StableUnderBaseChange.mk
state_before: 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
X Y Z : Scheme
f : X ⟶ Y
g : Y ⟶ Z
hP : RingHom.StableUnderBaseChange 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)
state_after: 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
X✝ Y✝ Z : Scheme
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z
hP : RingHom.StableUnderBaseChange 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 : sourceAffineLocally (fun {R S} [CommRing R] [CommRing S] => Q) g
⊢ sourceAffineLocally (fun {R S} [CommRing R] [CommRing S] => Q) (pullback.fst f g)
tactic: intros X Y S _ _ f g H
state_before: 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
X✝ Y✝ Z : Scheme
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z
hP : RingHom.StableUnderBaseChange 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 : sourceAffineLocally (fun {R S} [CommRing R] [CommRing S] => Q) g
⊢ sourceAffineLocally (fun {R S} [CommRing R] [CommRing S] => Q) (pullback.fst f g)
state_after: 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
X✝ Y✝ Z : Scheme
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z
hP : RingHom.StableUnderBaseChange 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: rw [← HasAffineProperty.iff_of_isAffine (P := P)] at H ⊢
state_before: 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
X✝ Y✝ Z : Scheme
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z
hP : RingHom.StableUnderBaseChange 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)
state_after: 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
X✝ Y✝ Z : Scheme
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z
hP : RingHom.StableUnderBaseChange 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
X✝ Y✝ Z : Scheme
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z
hP : RingHom.StableUnderBaseChange 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)
tactic: wlog hX : IsAffine Y generalizing Y
state_before: P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝² : HasRingHomProperty P Q
X✝ Y✝ Z : Scheme
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z
hP : RingHom.StableUnderBaseChange 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)
state_after: P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝² : HasRingHomProperty P Q
X✝ Y✝ Z : Scheme
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z
hP : RingHom.StableUnderBaseChange 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 : Q (Scheme.Hom.app g ⊤)
hX : IsAffine Y
⊢ Q (Scheme.Hom.app (pullback.fst f g) ⊤)
tactic: rw [iff_of_isAffine (P := P)] at H ⊢
state_before: P : MorphismProperty Scheme
Q : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
inst✝² : HasRingHomProperty P Q
X✝ Y✝ Z : Scheme
f✝ : X✝ ⟶ Y✝
g✝ : Y✝ ⟶ Z
hP : RingHom.StableUnderBaseChange 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 : Q (Scheme.Hom.app g ⊤)
hX : IsAffine Y
⊢ Q (Scheme.Hom.app (pullback.fst f g) ⊤)
state_after: no goals
tactic: exact hP.pullback_fst_app_top _ (isLocal_ringHomProperty P).respectsIso _ _ H