Theorem: AlgebraicGeometry.Scheme.Pullback.lift_comp_ι
File: Mathlib/AlgebraicGeometry/Pullbacks.lean

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.snd ≫ 𝒰.map i ≫ f = (pullback.fst ≫ p2 𝒰 f g) ≫ g
state_after: no goals

tactic: apply ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).hom_ext
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 (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ (gluing 𝒰 f g).ι i = pullback.fst
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).J),
    ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).map x ≫
        pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ (gluing 𝒰 f g).ι i =
      ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).map x ≫ pullback.fst

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
⊢ ∀ (x : ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).J),
    ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).map x ≫
        pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ (gluing 𝒰 f g).ι i =
      ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).map x ≫ pullback.fst
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).J
⊢ ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).map j ≫
      pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ (gluing 𝒰 f g).ι i =
    ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).map j ≫ pullback.fst

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).J
⊢ ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).map j ≫
      pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ (gluing 𝒰 f g).ι i =
    ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).map j ≫ pullback.fst
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).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ (gluing 𝒰 f g).ι i =
    pullback.fst ≫ pullback.fst

tactic: trans pullbackFstιToV 𝒰 f g i j ≫ fV 𝒰 f g j i ≫ (gluing 𝒰 f g).ι _
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).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ (gluing 𝒰 f g).ι i =
    pullback.fst ≫ pullback.fst
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).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ 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).J
⊢ pullbackFstιToV 𝒰 f g i j ≫ fV 𝒰 f g j i ≫ (gluing 𝒰 f g).ι j = pullback.fst ≫ pullback.fst

tactic: rw [← show _ = fV 𝒰 f g j i ≫ _ from (gluing 𝒰 f g).glue_condition j 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
i : 𝒰.J
j : ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ (gluing 𝒰 f g).ι i =
    pullbackFstιToV 𝒰 f g i j ≫ fV 𝒰 f g j i ≫ (gluing 𝒰 f g).ι j
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).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ (gluing 𝒰 f g).ι i =
    pullbackFstιToV 𝒰 f g i j ≫ (gluing 𝒰 f g).t j i ≫ (gluing 𝒰 f g).f i j ≫ (gluing 𝒰 f g).ι i

tactic: simp_rw [← Category.assoc]
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
j : ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ (gluing 𝒰 f g).ι i =
    pullbackFstιToV 𝒰 f g i j ≫ (gluing 𝒰 f g).t j i ≫ (gluing 𝒰 f g).f i j ≫ (gluing 𝒰 f g).ι 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).J
⊢ (pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯) ≫ (gluing 𝒰 f g).ι i =
    ((pullbackFstιToV 𝒰 f g i j ≫ (gluing 𝒰 f g).t j i) ≫ (gluing 𝒰 f g).f i j) ≫ (gluing 𝒰 f g).ι i

tactic: congr 1
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
j : ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).J
⊢ (pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯) ≫ (gluing 𝒰 f g).ι i =
    ((pullbackFstιToV 𝒰 f g i j ≫ (gluing 𝒰 f g).t j i) ≫ (gluing 𝒰 f g).f i j) ≫ (gluing 𝒰 f g).ι i
state_after: case e_a
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).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ =
    (pullbackFstιToV 𝒰 f g i j ≫ (gluing 𝒰 f g).t j i) ≫ (gluing 𝒰 f g).f i j

tactic: rw [gluing_f, gluing_t]
state_before: case e_a
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).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ =
    (pullbackFstιToV 𝒰 f g i j ≫ (gluing 𝒰 f g).t j i) ≫ (gluing 𝒰 f g).f i j
state_after: case e_a
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).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ =
    (pullbackFstιToV 𝒰 f g i j ≫ t 𝒰 f g j i) ≫ pullback.fst

tactic: apply pullback.hom_ext <;> simp_rw [Category.assoc]
state_before: case e_a
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).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ =
    (pullbackFstιToV 𝒰 f g i j ≫ t 𝒰 f g j i) ≫ pullback.fst
state_after: case e_a.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).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ pullback.fst =
    pullbackFstιToV 𝒰 f g i j ≫ t 𝒰 f g j i ≫ pullback.fst ≫ pullback.fst

case e_a.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).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ pullback.snd =
    pullbackFstιToV 𝒰 f g i j ≫ t 𝒰 f g j i ≫ pullback.fst ≫ pullback.snd

tactic: simp_rw [t_fst_fst, pullback.lift_fst, pullbackFstιToV_snd, GlueData.openCover_map]
state_before: case e_a.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).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ pullback.fst =
    pullbackFstιToV 𝒰 f g i j ≫ t 𝒰 f g j i ≫ pullback.fst ≫ pullback.fst
state_after: no goals

tactic: simp_rw [t_fst_snd, pullback.lift_snd, pullbackFstιToV_fst_assoc, pullback.condition_assoc,
  GlueData.openCover_map, p2]
state_before: case e_a.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).J
⊢ pullback.fst ≫ pullback.lift pullback.snd (pullback.fst ≫ p2 𝒰 f g) ⋯ ≫ pullback.snd =
    pullbackFstιToV 𝒰 f g i j ≫ t 𝒰 f g j i ≫ pullback.fst ≫ pullback.snd
state_after: case e_a.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).J
⊢ pullback.snd ≫ (gluing 𝒰 f g).ι j ≫ Multicoequalizer.desc (gluing 𝒰 f g).diagram Y (fun i => pullback.snd) ⋯ =
    pullback.snd ≫ pullback.snd

tactic: simp
state_before: case e_a.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).J
⊢ pullback.snd ≫ (gluing 𝒰 f g).ι j ≫ Multicoequalizer.desc (gluing 𝒰 f g).diagram Y (fun i => pullback.snd) ⋯ =
    pullback.snd ≫ pullback.snd
state_after: no goals

tactic: rw [pullback.condition, ← Category.assoc]
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
j : ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).J
⊢ pullbackFstιToV 𝒰 f g i j ≫ fV 𝒰 f g j i ≫ (gluing 𝒰 f g).ι j = pullback.fst ≫ pullback.fst
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).J
⊢ (pullbackFstιToV 𝒰 f g i j ≫ fV 𝒰 f g j i) ≫ (gluing 𝒰 f g).ι j = pullback.snd ≫ (gluing 𝒰 f g).openCover.map j

tactic: simp_rw [pullbackFstιToV_fst, GlueData.openCover_map]
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
j : ((gluing 𝒰 f g).openCover.pullbackCover pullback.fst).J
⊢ (pullbackFstιToV 𝒰 f g i j ≫ fV 𝒰 f g j i) ≫ (gluing 𝒰 f g).ι j = pullback.snd ≫ (gluing 𝒰 f g).openCover.map j
state_after: no goals