Theorem: AlgebraicGeometry.Scheme.Pullback.lift_comp_ι
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
i : 𝒰.J
⊢ pullback.snd (p1 𝒰 f g) (𝒰.map i) ≫ 𝒰.map i ≫ f = (pullback.fst (p1 𝒰 f g) (𝒰.map i) ≫ p2 𝒰 f g) ≫ g
state_after: no goals
tactic: rw [← pullback.condition_assoc, Category.assoc, p_comm]
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
i : 𝒰.J
⊢ pullback.lift (pullback.snd (p1 𝒰 f g) (𝒰.map i)) (pullback.fst (p1 𝒰 f g) (𝒰.map i) ≫ p2 𝒰 f g) ⋯ ≫
      (gluing 𝒰 f g).ι i =
    pullback.fst (p1 𝒰 f g) (𝒰.map i)
state_after: case h
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
i : 𝒰.J
⊢ ∀ (x : ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).J),
    ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).map x ≫
        pullback.lift (pullback.snd (p1 𝒰 f g) (𝒰.map i)) (pullback.fst (p1 𝒰 f g) (𝒰.map i) ≫ p2 𝒰 f g) ⋯ ≫
          (gluing 𝒰 f g).ι i =
      ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).map x ≫
        pullback.fst (p1 𝒰 f g) (𝒰.map i)
tactic: apply ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst _ _)).hom_ext
state_before: case h
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
i : 𝒰.J
⊢ ∀ (x : ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).J),
    ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).map x ≫
        pullback.lift (pullback.snd (p1 𝒰 f g) (𝒰.map i)) (pullback.fst (p1 𝒰 f g) (𝒰.map i) ≫ p2 𝒰 f g) ⋯ ≫
          (gluing 𝒰 f g).ι i =
      ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).map x ≫
        pullback.fst (p1 𝒰 f g) (𝒰.map i)
state_after: case h
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
i : 𝒰.J
j : ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).J
⊢ ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).map j ≫
      pullback.lift (pullback.snd (p1 𝒰 f g) (𝒰.map i)) (pullback.fst (p1 𝒰 f g) (𝒰.map i) ≫ p2 𝒰 f g) ⋯ ≫
        (gluing 𝒰 f g).ι i =
    ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).map j ≫
      pullback.fst (p1 𝒰 f g) (𝒰.map i)
tactic: intro j
state_before: case h
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
i : 𝒰.J
j : ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).J
⊢ ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).map j ≫
      pullback.lift (pullback.snd (p1 𝒰 f g) (𝒰.map i)) (pullback.fst (p1 𝒰 f g) (𝒰.map i) ≫ p2 𝒰 f g) ⋯ ≫
        (gluing 𝒰 f g).ι i =
    ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).map j ≫
      pullback.fst (p1 𝒰 f g) (𝒰.map i)
state_after: case h
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
i : 𝒰.J
j : ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).J
⊢ pullback.fst (pullback.fst (p1 𝒰 f g) (𝒰.map i)) ((gluing 𝒰 f g).openCover.map j) ≫
      pullback.lift (pullback.snd (p1 𝒰 f g) (𝒰.map i)) (pullback.fst (p1 𝒰 f g) (𝒰.map i) ≫ p2 𝒰 f g) ⋯ ≫
        (gluing 𝒰 f g).ι i =
    pullback.fst (pullback.fst (p1 𝒰 f g) (𝒰.map i)) ((gluing 𝒰 f g).openCover.map j) ≫
      pullback.fst (p1 𝒰 f g) (𝒰.map i)
tactic: dsimp only [OpenCover.pullbackCover]
state_before: case h
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
i : 𝒰.J
j : ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).J
⊢ pullback.fst (pullback.fst (p1 𝒰 f g) (𝒰.map i)) ((gluing 𝒰 f g).openCover.map j) ≫
      pullback.lift (pullback.snd (p1 𝒰 f g) (𝒰.map i)) (pullback.fst (p1 𝒰 f g) (𝒰.map i) ≫ p2 𝒰 f g) ⋯ ≫
        (gluing 𝒰 f g).ι i =
    pullback.fst (pullback.fst (p1 𝒰 f g) (𝒰.map i)) ((gluing 𝒰 f g).openCover.map j) ≫
      pullback.fst (p1 𝒰 f g) (𝒰.map 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
i : 𝒰.J
j : ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).J
⊢ pullback.fst (pullback.fst (p1 𝒰 f g) (𝒰.map i)) ((gluing 𝒰 f g).openCover.map j) ≫
      pullback.lift (pullback.snd (p1 𝒰 f g) (𝒰.map i)) (pullback.fst (p1 𝒰 f g) (𝒰.map i) ≫ p2 𝒰 f g) ⋯ ≫
        (gluing 𝒰 f g).ι i =
    pullbackFstιToV 𝒰 f g i j ≫ fV 𝒰 f g j i ≫ (gluing 𝒰 f g).ι j

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
i : 𝒰.J
j : ((gluing 𝒰 f g).openCover.pullbackCover (pullback.fst (p1 𝒰 f g) (𝒰.map i))).J
⊢ pullbackFstιToV 𝒰 f g i j ≫ fV 𝒰 f g j i ≫ (gluing 𝒰 f g).ι j =
    pullback.fst (pullback.fst (p1 𝒰 f g) (𝒰.map i)) ((gluing 𝒰 f g).openCover.map j) ≫
      pullback.fst (p1 𝒰 f g) (𝒰.map i)
tactic: trans pullbackFstιToV 𝒰 f g i j ≫ fV 𝒰 f g j i ≫ (gluing 𝒰 f g).ι _