Theorem: AlgebraicGeometry.Scheme.Pullback.openCoverOfRight_J
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✝
𝒰 : Y.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✝
𝒰 : Y.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
⊢ ∀ (i : 𝒰.J),
    pullback.map f (𝒰.map i ≫ g) f g (𝟙 X) (𝒰.map i) (𝟙 Z) ⋯ ⋯ =
      (pullbackSymmetry f (𝒰.map i ≫ g)).hom ≫
        ((openCoverOfLeft 𝒰 g f).pushforwardIso (pullbackSymmetry g f).hom).map ((Equiv.refl 𝒰.J) i)
tactic: fapply
    ((openCoverOfLeft 𝒰 g f).pushforwardIso (pullbackSymmetry _ _).hom).copy 𝒰.J
      (fun i => pullback f (𝒰.map i ≫ g))
      (fun i => pullback.map _ _ _ _ (𝟙 _) (𝒰.map i) (𝟙 _) (by simp) (Category.comp_id _))
      (Equiv.refl _) fun i => pullbackSymmetry _ _
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✝
𝒰 : Y.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
⊢ ∀ (i : 𝒰.J),
    pullback.map f (𝒰.map i ≫ g) f g (𝟙 X) (𝒰.map i) (𝟙 Z) ⋯ ⋯ =
      (pullbackSymmetry f (𝒰.map i ≫ g)).hom ≫
        ((openCoverOfLeft 𝒰 g f).pushforwardIso (pullbackSymmetry g f).hom).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✝
𝒰 : Y.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
i : 𝒰.J
⊢ pullback.map f (𝒰.map i ≫ g) f g (𝟙 X) (𝒰.map i) (𝟙 Z) ⋯ ⋯ =
    (pullbackSymmetry f (𝒰.map i ≫ g)).hom ≫
      ((openCoverOfLeft 𝒰 g f).pushforwardIso (pullbackSymmetry g f).hom).map ((Equiv.refl 𝒰.J) i)
tactic: intro i
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✝
𝒰 : Y.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
i : 𝒰.J
⊢ pullback.map f (𝒰.map i ≫ g) f g (𝟙 X) (𝒰.map i) (𝟙 Z) ⋯ ⋯ =
    (pullbackSymmetry f (𝒰.map i ≫ g)).hom ≫
      ((openCoverOfLeft 𝒰 g f).pushforwardIso (pullbackSymmetry g f).hom).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✝
𝒰 : Y.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
i : 𝒰.J
⊢ pullback.map f (𝒰.map i ≫ g) f g (𝟙 X) (𝒰.map i) (𝟙 Z) ⋯ ⋯ =
    (pullbackSymmetry f (𝒰.map i ≫ g)).hom ≫
      pullback.map (𝒰.map i ≫ g) f g f (𝒰.map i) (𝟙 X) (𝟙 Z) ⋯ ⋯ ≫ (pullbackSymmetry g f).hom
tactic: dsimp [OpenCover.bind]
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✝
𝒰 : Y.OpenCover
f : X ⟶ Z
g : Y ⟶ Z
i : 𝒰.J
⊢ pullback.map f (𝒰.map i ≫ g) f g (𝟙 X) (𝒰.map i) (𝟙 Z) ⋯ ⋯ =
    (pullbackSymmetry f (𝒰.map i ≫ g)).hom ≫
      pullback.map (𝒰.map i ≫ g) f g f (𝒰.map i) (𝟙 X) (𝟙 Z) ⋯ ⋯ ≫ (pullbackSymmetry g f).hom
state_after: no goals
tactic: apply pullback.hom_ext <;> simp