Theorem: _private.Mathlib.AlgebraicGeometry.Morphisms.Basic.0.AlgebraicGeometry.HasAffineProperty.pullback_fst_of_right
File: Mathlib/AlgebraicGeometry/Morphisms/Basic.lean

Proof steps:
state_before: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
⊢ P (pullback.fst f g)
state_after: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this : Q.IsLocal := isLocal_affineProperty P
⊢ P (pullback.fst f g)
tactic: letI := isLocal_affineProperty P
state_before: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this : Q.IsLocal := isLocal_affineProperty P
⊢ P (pullback.fst f g)
state_after: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this : Q.IsLocal := isLocal_affineProperty P
⊢ ∀ (i : (X.affineCover.pullbackCover (pullback.fst f g)).J), Q (X.affineCover.pullbackHom (pullback.fst f g) i)
tactic: rw [iff_of_openCover (P := P) X.affineCover]
state_before: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this : Q.IsLocal := isLocal_affineProperty P
⊢ ∀ (i : (X.affineCover.pullbackCover (pullback.fst f g)).J), Q (X.affineCover.pullbackHom (pullback.fst f g) i)
state_after: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this : Q.IsLocal := isLocal_affineProperty P
i : (X.affineCover.pullbackCover (pullback.fst f g)).J
⊢ Q (X.affineCover.pullbackHom (pullback.fst f g) i)
tactic: intro i
state_before: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this : Q.IsLocal := isLocal_affineProperty P
i : (X.affineCover.pullbackCover (pullback.fst f g)).J
⊢ Q (X.affineCover.pullbackHom (pullback.fst f g) i)
state_after: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this : Q.IsLocal := isLocal_affineProperty P
i : (X.affineCover.pullbackCover (pullback.fst f g)).J
e : pullback (pullback.fst f g) (X.affineCover.map i) ≅ pullback (X.affineCover.map i ≫ f) g :=
  pullbackSymmetry (pullback.fst f g) (X.affineCover.map i) ≪≫ pullbackRightPullbackFstIso f g (X.affineCover.map i)
⊢ Q (X.affineCover.pullbackHom (pullback.fst f g) i)
tactic: let e := pullbackSymmetry _ _ ≪≫ pullbackRightPullbackFstIso f g (X.affineCover.map i)
state_before: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this : Q.IsLocal := isLocal_affineProperty P
i : (X.affineCover.pullbackCover (pullback.fst f g)).J
e : pullback (pullback.fst f g) (X.affineCover.map i) ≅ pullback (X.affineCover.map i ≫ f) g :=
  pullbackSymmetry (pullback.fst f g) (X.affineCover.map i) ≪≫ pullbackRightPullbackFstIso f g (X.affineCover.map i)
⊢ Q (X.affineCover.pullbackHom (pullback.fst f g) i)
state_after: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this✝ : Q.IsLocal := isLocal_affineProperty P
i : (X.affineCover.pullbackCover (pullback.fst f g)).J
e : pullback (pullback.fst f g) (X.affineCover.map i) ≅ pullback (X.affineCover.map i ≫ f) g :=
  pullbackSymmetry (pullback.fst f g) (X.affineCover.map i) ≪≫ pullbackRightPullbackFstIso f g (X.affineCover.map i)
this : e.hom ≫ pullback.fst (X.affineCover.map i ≫ f) g = X.affineCover.pullbackHom (pullback.fst f g) i
⊢ Q (X.affineCover.pullbackHom (pullback.fst f g) i)
tactic: have : e.hom ≫ pullback.fst _ _ = X.affineCover.pullbackHom (pullback.fst _ _) i := by
    simp [e, Scheme.OpenCover.pullbackHom]
state_before: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this✝ : Q.IsLocal := isLocal_affineProperty P
i : (X.affineCover.pullbackCover (pullback.fst f g)).J
e : pullback (pullback.fst f g) (X.affineCover.map i) ≅ pullback (X.affineCover.map i ≫ f) g :=
  pullbackSymmetry (pullback.fst f g) (X.affineCover.map i) ≪≫ pullbackRightPullbackFstIso f g (X.affineCover.map i)
this : e.hom ≫ pullback.fst (X.affineCover.map i ≫ f) g = X.affineCover.pullbackHom (pullback.fst f g) i
⊢ Q (X.affineCover.pullbackHom (pullback.fst f g) i)
state_after: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this✝ : Q.IsLocal := isLocal_affineProperty P
i : (X.affineCover.pullbackCover (pullback.fst f g)).J
e : pullback (pullback.fst f g) (X.affineCover.map i) ≅ pullback (X.affineCover.map i ≫ f) g :=
  pullbackSymmetry (pullback.fst f g) (X.affineCover.map i) ≪≫ pullbackRightPullbackFstIso f g (X.affineCover.map i)
this : e.hom ≫ pullback.fst (X.affineCover.map i ≫ f) g = X.affineCover.pullbackHom (pullback.fst f g) i
⊢ Q (pullback.fst (X.affineCover.map i ≫ f) g)
tactic: rw [← this, Q.cancel_left_of_respectsIso]
state_before: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this✝ : Q.IsLocal := isLocal_affineProperty P
i : (X.affineCover.pullbackCover (pullback.fst f g)).J
e : pullback (pullback.fst f g) (X.affineCover.map i) ≅ pullback (X.affineCover.map i ≫ f) g :=
  pullbackSymmetry (pullback.fst f g) (X.affineCover.map i) ≪≫ pullbackRightPullbackFstIso f g (X.affineCover.map i)
this : e.hom ≫ pullback.fst (X.affineCover.map i ≫ f) g = X.affineCover.pullbackHom (pullback.fst f g) i
⊢ Q (pullback.fst (X.affineCover.map i ≫ f) g)
state_after: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this✝ : Q.IsLocal := isLocal_affineProperty P
i : (X.affineCover.pullbackCover (pullback.fst f g)).J
e : pullback (pullback.fst f g) (X.affineCover.map i) ≅ pullback (X.affineCover.map i ≫ f) g :=
  pullbackSymmetry (pullback.fst f g) (X.affineCover.map i) ≪≫ pullbackRightPullbackFstIso f g (X.affineCover.map i)
this : e.hom ≫ pullback.fst (X.affineCover.map i ≫ f) g = X.affineCover.pullbackHom (pullback.fst f g) i
⊢ Q g
tactic: apply hP' (.of_hasPullback _ _)
state_before: P : MorphismProperty Scheme
Q : AffineTargetMorphismProperty
inst✝¹ : HasAffineProperty P Q
X✝ Y✝ : Scheme
f✝ : X✝ ⟶ Y✝
hP' : Q.StableUnderBaseChange
X Y S : Scheme
f : X ⟶ S
g : Y ⟶ S
inst✝ : IsAffine S
H : Q g
this✝ : Q.IsLocal := isLocal_affineProperty P
i : (X.affineCover.pullbackCover (pullback.fst f g)).J
e : pullback (pullback.fst f g) (X.affineCover.map i) ≅ pullback (X.affineCover.map i ≫ f) g :=
  pullbackSymmetry (pullback.fst f g) (X.affineCover.map i) ≪≫ pullbackRightPullbackFstIso f g (X.affineCover.map i)
this : e.hom ≫ pullback.fst (X.affineCover.map i ≫ f) g = X.affineCover.pullbackHom (pullback.fst f g) i
⊢ Q g
state_after: no goals
tactic: exact H