Theorem: CategoryTheory.MorphismProperty.StableUnderBaseChange.baseChange_map
File: Mathlib/CategoryTheory/MorphismProperty/Limits.lean

tactic: let e :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫
    pullback.congrHom (g.w.trans (Category.comp_id _)) rfl
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasPullbacks C
P : MorphismProperty C
hP : P.StableUnderBaseChange
S S' : C
f : S' ⟶ S
X Y : Over S
g : X ⟶ Y
H : P g.left
⊢ P ((Over.baseChange f).map g).left
state_after: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasPullbacks C
P : MorphismProperty C
hP : P.StableUnderBaseChange
S S' : C
f : S' ⟶ S
X Y : Over S
g : X ⟶ Y
H : P g.left
e : pullback g.left pullback.fst ≅ pullback X.hom f :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫ pullback.congrHom ⋯ ⋯
⊢ P ((Over.baseChange f).map g).left

tactic: have : e.inv ≫ pullback.snd = ((Over.baseChange f).map g).left := by
  ext <;> dsimp [e] <;> simp
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasPullbacks C
P : MorphismProperty C
hP : P.StableUnderBaseChange
S S' : C
f : S' ⟶ S
X Y : Over S
g : X ⟶ Y
H : P g.left
e : pullback g.left pullback.fst ≅ pullback X.hom f :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫ pullback.congrHom ⋯ ⋯
⊢ P ((Over.baseChange f).map g).left
state_after: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasPullbacks C
P : MorphismProperty C
hP : P.StableUnderBaseChange
S S' : C
f : S' ⟶ S
X Y : Over S
g : X ⟶ Y
H : P g.left
e : pullback g.left pullback.fst ≅ pullback X.hom f :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫ pullback.congrHom ⋯ ⋯
this : e.inv ≫ pullback.snd = ((Over.baseChange f).map g).left
⊢ P ((Over.baseChange f).map g).left

tactic: rw [← this, hP.respectsIso.cancel_left_isIso]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasPullbacks C
P : MorphismProperty C
hP : P.StableUnderBaseChange
S S' : C
f : S' ⟶ S
X Y : Over S
g : X ⟶ Y
H : P g.left
e : pullback g.left pullback.fst ≅ pullback X.hom f :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫ pullback.congrHom ⋯ ⋯
this : e.inv ≫ pullback.snd = ((Over.baseChange f).map g).left
⊢ P ((Over.baseChange f).map g).left
state_after: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasPullbacks C
P : MorphismProperty C
hP : P.StableUnderBaseChange
S S' : C
f : S' ⟶ S
X Y : Over S
g : X ⟶ Y
H : P g.left
e : pullback g.left pullback.fst ≅ pullback X.hom f :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫ pullback.congrHom ⋯ ⋯
this : e.inv ≫ pullback.snd = ((Over.baseChange f).map g).left
⊢ P pullback.snd

tactic: exact hP.snd _ _ H
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasPullbacks C
P : MorphismProperty C
hP : P.StableUnderBaseChange
S S' : C
f : S' ⟶ S
X Y : Over S
g : X ⟶ Y
H : P g.left
e : pullback g.left pullback.fst ≅ pullback X.hom f :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫ pullback.congrHom ⋯ ⋯
this : e.inv ≫ pullback.snd = ((Over.baseChange f).map g).left
⊢ P pullback.snd
state_after: no goals

tactic: ext <;> dsimp [e] <;> simp
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : HasPullbacks C
P : MorphismProperty C
hP : P.StableUnderBaseChange
S S' : C
f : S' ⟶ S
X Y : Over S
g : X ⟶ Y
H : P g.left
e : pullback g.left pullback.fst ≅ pullback X.hom f :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫ pullback.congrHom ⋯ ⋯
⊢ e.inv ≫ pullback.snd = ((Over.baseChange f).map g).left
state_after: no goals