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

Proof steps:
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.pullback 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
this : P.RespectsIso
⊢ P ((Over.pullback f).map g).left
tactic: have := hP.respectsIso
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
this : P.RespectsIso
⊢ P ((Over.pullback 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
this : P.RespectsIso
e : pullback g.left (pullback.fst Y.hom f) ≅ pullback X.hom f :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫ pullback.congrHom ⋯ ⋯
⊢ P ((Over.pullback f).map g).left
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
this : P.RespectsIso
e : pullback g.left (pullback.fst Y.hom f) ≅ pullback X.hom f :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫ pullback.congrHom ⋯ ⋯
⊢ P ((Over.pullback 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
this✝ : P.RespectsIso
e : pullback g.left (pullback.fst Y.hom f) ≅ pullback X.hom f :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫ pullback.congrHom ⋯ ⋯
this : e.inv ≫ pullback.snd g.left (pullback.fst Y.hom f) = ((Over.pullback f).map g).left
⊢ P ((Over.pullback f).map g).left
tactic: have : e.inv ≫ (pullback.snd _ _) = ((Over.pullback 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
this✝ : P.RespectsIso
e : pullback g.left (pullback.fst Y.hom f) ≅ pullback X.hom f :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫ pullback.congrHom ⋯ ⋯
this : e.inv ≫ pullback.snd g.left (pullback.fst Y.hom f) = ((Over.pullback f).map g).left
⊢ P ((Over.pullback 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
this✝ : P.RespectsIso
e : pullback g.left (pullback.fst Y.hom f) ≅ pullback X.hom f :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫ pullback.congrHom ⋯ ⋯
this : e.inv ≫ pullback.snd g.left (pullback.fst Y.hom f) = ((Over.pullback f).map g).left
⊢ P (pullback.snd g.left (pullback.fst Y.hom f))
tactic: rw [← this, P.cancel_left_of_respectsIso]
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
this✝ : P.RespectsIso
e : pullback g.left (pullback.fst Y.hom f) ≅ pullback X.hom f :=
  pullbackRightPullbackFstIso Y.hom f g.left ≪≫ pullback.congrHom ⋯ ⋯
this : e.inv ≫ pullback.snd g.left (pullback.fst Y.hom f) = ((Over.pullback f).map g).left
⊢ P (pullback.snd g.left (pullback.fst Y.hom f))
state_after: no goals
tactic: exact hP.snd _ _ H