Theorem: AlgebraicGeometry.Scheme.Pullback.openCoverOfLeft_map
File: Mathlib/AlgebraicGeometry/Pullbacks.lean

Proof steps:
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : Scheme
𝒰✝ : X.OpenCover
f✝ : X ⟶ Z
g✝ : Y ⟶ Z
inst✝ : ∀ (i : 𝒰✝.J), HasPullback (𝒰✝.map i ≫ f✝) g✝
s : PullbackCone f✝ g✝
𝒰 : X.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
⊢ (pullback f g).OpenCover
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : Scheme
𝒰✝ : X.OpenCover
f✝ : X ⟶ Z
g✝ : Y ⟶ Z
inst✝ : ∀ (i : 𝒰✝.J), HasPullback (𝒰✝.map i ≫ f✝) g✝
s : PullbackCone f✝ g✝
𝒰 : X.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
⊢ ∀ (i : 𝒰.J),
    pullback.map (𝒰.map i ≫ f) g f g (𝒰.map i) (𝟙 Y) (𝟙 Z) ⋯ ⋯ =
      (Iso.refl ((fun i => pullback (𝒰.map i ≫ f) g) i)).hom ≫
        ((gluing 𝒰 f g).openCover.pushforwardIso
              (limit.isoLimitCone
                  { cone := PullbackCone.mk (p1 𝒰 f g) (p2 𝒰 f g) ⋯, isLimit := gluedIsLimit 𝒰 f g }).inv).map
          ((Equiv.refl 𝒰.J) i)
tactic: fapply
    ((gluing 𝒰 f g).openCover.pushforwardIso
          (limit.isoLimitCone ⟨_, gluedIsLimit 𝒰 f g⟩).inv).copy
      𝒰.J (fun i => pullback (𝒰.map i ≫ f) g)
      (fun i => pullback.map _ _ _ _ (𝒰.map i) (𝟙 _) (𝟙 _) (Category.comp_id _) (by simp))
      (Equiv.refl 𝒰.J) fun _ => Iso.refl _
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : Scheme
𝒰✝ : X.OpenCover
f✝ : X ⟶ Z
g✝ : Y ⟶ Z
inst✝ : ∀ (i : 𝒰✝.J), HasPullback (𝒰✝.map i ≫ f✝) g✝
s : PullbackCone f✝ g✝
𝒰 : X.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
⊢ ∀ (i : 𝒰.J),
    pullback.map (𝒰.map i ≫ f) g f g (𝒰.map i) (𝟙 Y) (𝟙 Z) ⋯ ⋯ =
      (Iso.refl ((fun i => pullback (𝒰.map i ≫ f) g) i)).hom ≫
        ((gluing 𝒰 f g).openCover.pushforwardIso
              (limit.isoLimitCone
                  { cone := PullbackCone.mk (p1 𝒰 f g) (p2 𝒰 f g) ⋯, isLimit := gluedIsLimit 𝒰 f g }).inv).map
          ((Equiv.refl 𝒰.J) i)
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : Scheme
𝒰✝ : X.OpenCover
f✝ : X ⟶ Z
g✝ : Y ⟶ Z
inst✝ : ∀ (i : 𝒰✝.J), HasPullback (𝒰✝.map i ≫ f✝) g✝
s : PullbackCone f✝ g✝
𝒰 : X.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
i : 𝒰.J
⊢ pullback.map (𝒰.map i ≫ f) g f g (𝒰.map i) (𝟙 Y) (𝟙 Z) ⋯ ⋯ =
    (Iso.refl ((fun i => pullback (𝒰.map i ≫ f) g) i)).hom ≫
      ((gluing 𝒰 f g).openCover.pushforwardIso
            (limit.isoLimitCone
                { cone := PullbackCone.mk (p1 𝒰 f g) (p2 𝒰 f g) ⋯, isLimit := gluedIsLimit 𝒰 f g }).inv).map
        ((Equiv.refl 𝒰.J) i)
tactic: rintro (i : 𝒰.J)
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : Scheme
𝒰✝ : X.OpenCover
f✝ : X ⟶ Z
g✝ : Y ⟶ Z
inst✝ : ∀ (i : 𝒰✝.J), HasPullback (𝒰✝.map i ≫ f✝) g✝
s : PullbackCone f✝ g✝
𝒰 : X.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
i : 𝒰.J
⊢ pullback.map (𝒰.map i ≫ f) g f g (𝒰.map i) (𝟙 Y) (𝟙 Z) ⋯ ⋯ =
    (Iso.refl ((fun i => pullback (𝒰.map i ≫ f) g) i)).hom ≫
      ((gluing 𝒰 f g).openCover.pushforwardIso
            (limit.isoLimitCone
                { cone := PullbackCone.mk (p1 𝒰 f g) (p2 𝒰 f g) ⋯, isLimit := gluedIsLimit 𝒰 f g }).inv).map
        ((Equiv.refl 𝒰.J) i)
state_after: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : Scheme
𝒰✝ : X.OpenCover
f✝ : X ⟶ Z
g✝ : Y ⟶ Z
inst✝ : ∀ (i : 𝒰✝.J), HasPullback (𝒰✝.map i ≫ f✝) g✝
s : PullbackCone f✝ g✝
𝒰 : X.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
i : 𝒰.J
⊢ pullback.map (𝒰.map i ≫ f) g f g (𝒰.map i) (𝟙 Y) (𝟙 Z) ⋯ ⋯ =
    (Iso.refl (pullback (𝒰.map i ≫ f) g)).hom ≫
      (gluing 𝒰 f g).ι ((Equiv.refl 𝒰.J) i) ≫
        (limit.isoLimitCone { cone := PullbackCone.mk (p1 𝒰 f g) (p2 𝒰 f g) ⋯, isLimit := gluedIsLimit 𝒰 f g }).inv
tactic: simp_rw [OpenCover.pushforwardIso_J, OpenCover.pushforwardIso_map, GlueData.openCover_map,
    GlueData.openCover_J, gluing_J]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
X Y Z : Scheme
𝒰✝ : X.OpenCover
f✝ : X ⟶ Z
g✝ : Y ⟶ Z
inst✝ : ∀ (i : 𝒰✝.J), HasPullback (𝒰✝.map i ≫ f✝) g✝
s : PullbackCone f✝ g✝
𝒰 : X.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
i : 𝒰.J
⊢ pullback.map (𝒰.map i ≫ f) g f g (𝒰.map i) (𝟙 Y) (𝟙 Z) ⋯ ⋯ =
    (Iso.refl (pullback (𝒰.map i ≫ f) g)).hom ≫
      (gluing 𝒰 f g).ι ((Equiv.refl 𝒰.J) i) ≫
        (limit.isoLimitCone { cone := PullbackCone.mk (p1 𝒰 f g) (p2 𝒰 f g) ⋯, isLimit := gluedIsLimit 𝒰 f g }).inv
state_after: no goals
tactic: exact pullback.hom_ext (by simp [p1]) (by simp [p2])