Module: Mathlib.AlgebraicGeometry.AffineTransitionLimit

Goal state before:
pp: case inr
I : Type u
inst✝⁴ : Category.{u, u} I
S X : Scheme
D : I ⥤ Scheme
t : D ⟶ (Functor.const I).obj S
f : X ⟶ S
c : Cone D
hc : IsLimit c
inst✝³ : ∀ (i : I), CompactSpace ↥(D.obj i)
inst✝² : LocallyOfFiniteType f
inst✝¹ : IsCofiltered I
inst✝ : ∀ {i j : I} (f : i ⟶ j), IsAffineHom (D.map f)
i : I
a b : D.obj i ⟶ X
ha : t.app i = a ≫ f
hb : t.app i = b ≫ f
hab : c.π.app i ≫ a = c.π.app i ≫ b
this✝ : ∀ (i : I), IsAffineHom (c.π.app i)
A : ExistsHomHomCompEqCompAux D t f :=
  { c := c, hc := hc, i := i, a := a, ha := ha, b := b, hb := hb, hab := hab, 𝒰S := S.affineCover, h𝒰S := ⋯,
    𝒰X := fun i ↦ ((Precoverage.ZeroHypercover.pullback₁ f S.affineCover).X i).affineCover, h𝒰X := ⋯ }
𝒰 : (pullback.diagonalObj f).OpenCover := Pullback.diagonalCover f A.𝒰S A.𝒰X
W : (pullback.diagonalObj f).Opens := Pullback.diagonalCoverDiagonalRange f A.𝒰S A.𝒰X
k : A.𝒰D.I₀ → I
hki' : (j : A.𝒰D.I₀) → k j ⟶ A.i'
𝒰Df : (D.obj A.i').OpenCover := A.𝒰D.finiteSubcover
h : Nonempty ↥(D.obj A.i')
O : Finset I := {A.i'} ∪ Finset.image (fun i ↦ k (Cover.idx A.𝒰D ↑i)) Finset.univ
o : 𝒰Df.I₀ := ⋯.some
ho : k (Cover.idx A.𝒰D ↑o) ∈ O
l : I
hl1 : {X : I} → X ∈ O → (l ⟶ X)
hl2 :
  ∀ {X_1 Y : I} (mX : X_1 ∈ O) (mY : Y ∈ O) {f_1 : X_1 ⟶ Y},
    ⟨X_1, ⟨Y, ⟨mX, ⟨mY, f_1⟩⟩⟩⟩ ∈
        Finset.image (fun i ↦ ⟨k (Cover.idx A.𝒰D ↑i), ⟨A.i', ⟨⋯, ⟨⋯, hki' (Cover.idx A.𝒰D ↑i)⟩⟩⟩⟩) Finset.univ →
      hl1 mX ≫ f_1 = hl1 mY
this : ∀ (w v : 𝒰Df.I₀), hl1 ⋯ ≫ hki' (Cover.idx A.𝒰D ↑w) = hl1 ⋯ ≫ hki' (Cover.idx A.𝒰D ↑v)
u : (Precoverage.ZeroHypercover.pullback₁ (D.map (hl1 ho ≫ hki' (Cover.idx A.𝒰D ↑o))) 𝒰Df).I₀
F : pullback (D.map (hl1 ho ≫ hki' (Cover.idx A.𝒰D ↑o))) (𝒰Df.f u) ⟶
  pullback (D.map (hki' (Cover.idx A.𝒰D ↑u))) (A.𝒰D.f (Cover.idx A.𝒰D ↑u)) :=
  pullback.map (D.map (hl1 ho ≫ hki' (Cover.idx A.𝒰D ↑o))) (𝒰Df.f u) (D.map (hki' (Cover.idx A.𝒰D ↑u)))
    (A.𝒰D.f (Cover.idx A.𝒰D ↑u)) (D.map (hl1 ⋯)) (𝟙 (𝒰Df.X u)) (𝟙 (D.obj A.i')) ⋯ ⋯
hF :
  F ≫ pullback.fst (D.map (hki' (Cover.idx A.𝒰D ↑u))) (A.𝒰D.f (Cover.idx A.𝒰D ↑u)) =
    pullback.fst (D.map (hl1 ho ≫ hki' (Cover.idx A.𝒰D ↑o))) (𝒰Df.f u) ≫ D.map (hl1 ⋯)
heq :
  ∀ (j : A.𝒰D.I₀),
    pullback.fst (D.map (hki' j)) (A.𝒰D.f j) ≫ D.map (hki' j) ≫ D.map A.hii' ≫ A.a =
      pullback.fst (D.map (hki' j)) (A.𝒰D.f j) ≫ D.map (hki' j) ≫ D.map A.hii' ≫ A.b
⊢ F ≫
      pullback.fst (D.map (hki' (Cover.idx A.𝒰D ↑u))) (A.𝒰D.f (Cover.idx A.𝒰D ↑u)) ≫
        D.map (hki' (Cover.idx A.𝒰D ↑u)) ≫ D.map A.hii' ≫ a =
    pullback.fst (D.map (hl1 ho ≫ hki' (Cover.idx A.𝒰D ↑o))) (𝒰Df.f u) ≫
      D.map (hl1 ⋯) ≫ D.map (hki' (Cover.idx A.𝒰D ↑u)) ≫ D.map A.hii' ≫ b

Tactic:
← reassoc_of% hF,

Goal state after:
case inr
I : Type u
inst✝⁴ : Category.{u, u} I
S X : Scheme
D : I ⥤ Scheme
t : D ⟶ (Functor.const I).obj S
f : X ⟶ S
c : Cone D
hc : IsLimit c
inst✝³ : ∀ (i : I), CompactSpace ↥(D.obj i)
inst✝² : LocallyOfFiniteType f
inst✝¹ : IsCofiltered I
inst✝ : ∀ {i j : I} (f : i ⟶ j), IsAffineHom (D.map f)
i : I
a b : D.obj i ⟶ X
ha : t.app i = a ≫ f
hb : t.app i = b ≫ f
hab : c.π.app i ≫ a = c.π.app i ≫ b
this✝ : ∀ (i : I), IsAffineHom (c.π.app i)
A : ExistsHomHomCompEqCompAux D t f :=
  { c := c, hc := hc, i := i, a := a, ha := ha, b := b, hb := hb, hab := hab, 𝒰S := S.affineCover, h𝒰S := ⋯,
    𝒰X := fun i ↦ ((Precoverage.ZeroHypercover.pullback₁ f S.affineCover).X i).affineCover, h𝒰X := ⋯ }
𝒰 : (pullback.diagonalObj f).OpenCover := Pullback.diagonalCover f A.𝒰S A.𝒰X
W : (pullback.diagonalObj f).Opens := Pullback.diagonalCoverDiagonalRange f A.𝒰S A.𝒰X
k : A.𝒰D.I₀ → I
hki' : (j : A.𝒰D.I₀) → k j ⟶ A.i'
𝒰Df : (D.obj A.i').OpenCover := A.𝒰D.finiteSubcover
h : Nonempty ↥(D.obj A.i')
O : Finset I := {A.i'} ∪ Finset.image (fun i ↦ k (Cover.idx A.𝒰D ↑i)) Finset.univ
o : 𝒰Df.I₀ := ⋯.some
ho : k (Cover.idx A.𝒰D ↑o) ∈ O
l : I
hl1 : {X : I} → X ∈ O → (l ⟶ X)
hl2 :
  ∀ {X_1 Y : I} (mX : X_1 ∈ O) (mY : Y ∈ O) {f_1 : X_1 ⟶ Y},
    ⟨X_1, ⟨Y, ⟨mX, ⟨mY, f_1⟩⟩⟩⟩ ∈
        Finset.image (fun i ↦ ⟨k (Cover.idx A.𝒰D ↑i), ⟨A.i', ⟨⋯, ⟨⋯, hki' (Cover.idx A.𝒰D ↑i)⟩⟩⟩⟩) Finset.univ →
      hl1 mX ≫ f_1 = hl1 mY
this : ∀ (w v : 𝒰Df.I₀), hl1 ⋯ ≫ hki' (Cover.idx A.𝒰D ↑w) = hl1 ⋯ ≫ hki' (Cover.idx A.𝒰D ↑v)
u : (Precoverage.ZeroHypercover.pullback₁ (D.map (hl1 ho ≫ hki' (Cover.idx A.𝒰D ↑o))) 𝒰Df).I₀
F : pullback (D.map (hl1 ho ≫ hki' (Cover.idx A.𝒰D ↑o))) (𝒰Df.f u) ⟶
  pullback (D.map (hki' (Cover.idx A.𝒰D ↑u))) (A.𝒰D.f (Cover.idx A.𝒰D ↑u)) :=
  pullback.map (D.map (hl1 ho ≫ hki' (Cover.idx A.𝒰D ↑o))) (𝒰Df.f u) (D.map (hki' (Cover.idx A.𝒰D ↑u)))
    (A.𝒰D.f (Cover.idx A.𝒰D ↑u)) (D.map (hl1 ⋯)) (𝟙 (𝒰Df.X u)) (𝟙 (D.obj A.i')) ⋯ ⋯
hF :
  F ≫ pullback.fst (D.map (hki' (Cover.idx A.𝒰D ↑u))) (A.𝒰D.f (Cover.idx A.𝒰D ↑u)) =
    pullback.fst (D.map (hl1 ho ≫ hki' (Cover.idx A.𝒰D ↑o))) (𝒰Df.f u) ≫ D.map (hl1 ⋯)
heq :
  ∀ (j : A.𝒰D.I₀),
    pullback.fst (D.map (hki' j)) (A.𝒰D.f j) ≫ D.map (hki' j) ≫ D.map A.hii' ≫ A.a =
      pullback.fst (D.map (hki' j)) (A.𝒰D.f j) ≫ D.map (hki' j) ≫ D.map A.hii' ≫ A.b
⊢ F ≫
      pullback.fst (D.map (hki' (Cover.idx A.𝒰D ↑u))) (A.𝒰D.f (Cover.idx A.𝒰D ↑u)) ≫
        D.map (hki' (Cover.idx A.𝒰D ↑u)) ≫ D.map A.hii' ≫ a =
    F ≫
      pullback.fst (D.map (hki' (Cover.idx A.𝒰D ↑u))) (A.𝒰D.f (Cover.idx A.𝒰D ↑u)) ≫
        D.map (hki' (Cover.idx A.𝒰D ↑u)) ≫ D.map A.hii' ≫ b