Theorem: PresheafOfModules.colimitBundledCore_map
File: Mathlib/Algebra/Category/ModuleCat/Presheaf/Colimits.lean

Proof steps:
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X : Cᵒᵖ
j : J
⊢ colimit.ι (F ⋙ evaluation R X) j ≫
      (fun {X Y} f =>
          colimMap (whiskerLeft F (restriction R f)) ≫
            (preservesColimitIso (ModuleCat.restrictScalars (R.map f)) (F ⋙ evaluation R Y)).inv)
        (𝟙 X) =
    colimit.ι (F ⋙ evaluation R X) j ≫
      (ModuleCat.restrictScalarsId' (R.map (𝟙 X)) ⋯).inv.app ((fun X => colimit (F ⋙ evaluation R X)) X)
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X : Cᵒᵖ
j : J
⊢ colimit.ι (F ⋙ evaluation R X) j ≫
      colimMap (whiskerLeft F (restriction R (𝟙 X))) ≫
        (preservesColimitIso (ModuleCat.restrictScalars (R.map (𝟙 X))) (F ⋙ evaluation R X)).inv =
    colimit.ι (F ⋙ evaluation R X) j ≫
      (ModuleCat.restrictScalarsId'App (R.map (𝟙 X)) ⋯ (colimit (F ⋙ evaluation R X))).inv
tactic: dsimp
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X : Cᵒᵖ
j : J
⊢ colimit.ι (F ⋙ evaluation R X) j ≫
      colimMap (whiskerLeft F (restriction R (𝟙 X))) ≫
        (preservesColimitIso (ModuleCat.restrictScalars (R.map (𝟙 X))) (F ⋙ evaluation R X)).inv =
    colimit.ι (F ⋙ evaluation R X) j ≫
      (ModuleCat.restrictScalarsId'App (R.map (𝟙 X)) ⋯ (colimit (F ⋙ evaluation R X))).inv
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X : Cᵒᵖ
j : J
⊢ restrictionApp (𝟙 X) (F.obj j) ≫
      colimit.ι (F ⋙ evaluation R X ⋙ ModuleCat.restrictScalars (R.map (𝟙 X))) j ≫
        (preservesColimitIso (ModuleCat.restrictScalars (R.map (𝟙 X))) (F ⋙ evaluation R X)).inv =
    colimit.ι (F ⋙ evaluation R X) j ≫
      (ModuleCat.restrictScalarsId'App (R.map (𝟙 X)) ⋯ (colimit (F ⋙ evaluation R X))).inv
tactic: rw [ι_colimMap_assoc, whiskerLeft_app, restriction_app]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X : Cᵒᵖ
j : J
⊢ restrictionApp (𝟙 X) (F.obj j) ≫
      colimit.ι (F ⋙ evaluation R X ⋙ ModuleCat.restrictScalars (R.map (𝟙 X))) j ≫
        (preservesColimitIso (ModuleCat.restrictScalars (R.map (𝟙 X))) (F ⋙ evaluation R X)).inv =
    colimit.ι (F ⋙ evaluation R X) j ≫
      (ModuleCat.restrictScalarsId'App (R.map (𝟙 X)) ⋯ (colimit (F ⋙ evaluation R X))).inv
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X : Cᵒᵖ
j : J
⊢ restrictionApp (𝟙 X) (F.obj j) ≫ (ModuleCat.restrictScalars (R.map (𝟙 X))).map (colimit.ι (F ⋙ evaluation R X) j) =
    (ModuleCat.restrictScalarsId'App (R.map (𝟙 X)) ⋯ ((F.obj j).obj X)).inv ≫
      (ModuleCat.restrictScalars (R.map (𝟙 X))).map (colimit.ι (F ⋙ evaluation R X) j)
tactic: erw [ι_preservesColimitsIso_inv (G := ModuleCat.restrictScalars (R.map (𝟙 X))),
      ModuleCat.restrictScalarsId'App_inv_naturality]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X : Cᵒᵖ
j : J
⊢ restrictionApp (𝟙 X) (F.obj j) ≫ (ModuleCat.restrictScalars (R.map (𝟙 X))).map (colimit.ι (F ⋙ evaluation R X) j) =
    (ModuleCat.restrictScalarsId'App (R.map (𝟙 X)) ⋯ ((F.obj j).obj X)).inv ≫
      (ModuleCat.restrictScalars (R.map (𝟙 X))).map (colimit.ι (F ⋙ evaluation R X) j)
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X : Cᵒᵖ
j : J
⊢ (ModuleCat.restrictScalarsId' (R.map (𝟙 X)) ⋯).inv.app ((F.obj j).obj X) ≫
      (ModuleCat.restrictScalars (R.map (𝟙 X))).map (colimit.ι (F ⋙ evaluation R X) j) =
    (ModuleCat.restrictScalarsId'App (R.map (𝟙 X)) ⋯ ((F.obj j).obj X)).inv ≫
      (ModuleCat.restrictScalars (R.map (𝟙 X))).map (colimit.ι (F ⋙ evaluation R X) j)
tactic: rw [restrictionApp_id]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X : Cᵒᵖ
j : J
⊢ (ModuleCat.restrictScalarsId' (R.map (𝟙 X)) ⋯).inv.app ((F.obj j).obj X) ≫
      (ModuleCat.restrictScalars (R.map (𝟙 X))).map (colimit.ι (F ⋙ evaluation R X) j) =
    (ModuleCat.restrictScalarsId'App (R.map (𝟙 X)) ⋯ ((F.obj j).obj X)).inv ≫
      (ModuleCat.restrictScalars (R.map (𝟙 X))).map (colimit.ι (F ⋙ evaluation R X) j)
state_after: no goals
tactic: rfl
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ colimit.ι (F ⋙ evaluation R X) j ≫
      (fun {X Y} f =>
          colimMap (whiskerLeft F (restriction R f)) ≫
            (preservesColimitIso (ModuleCat.restrictScalars (R.map f)) (F ⋙ evaluation R Y)).inv)
        (f ≫ g) =
    colimit.ι (F ⋙ evaluation R X) j ≫
      (fun {X Y} f =>
            colimMap (whiskerLeft F (restriction R f)) ≫
              (preservesColimitIso (ModuleCat.restrictScalars (R.map f)) (F ⋙ evaluation R Y)).inv)
          f ≫
        (ModuleCat.restrictScalars (R.map f)).map
            ((fun {X Y} f =>
                colimMap (whiskerLeft F (restriction R f)) ≫
                  (preservesColimitIso (ModuleCat.restrictScalars (R.map f)) (F ⋙ evaluation R Y)).inv)
              g) ≫
          (ModuleCat.restrictScalarsComp' (R.map f) (R.map g) (R.map (f ≫ g)) ⋯).inv.app
            ((fun X => colimit (F ⋙ evaluation R X)) Z)
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ colimit.ι (F ⋙ evaluation R X) j ≫
      colimMap (whiskerLeft F (restriction R (f ≫ g))) ≫
        (preservesColimitIso (ModuleCat.restrictScalars (R.map (f ≫ g))) (F ⋙ evaluation R Z)).inv =
    colimit.ι (F ⋙ evaluation R X) j ≫
      (colimMap (whiskerLeft F (restriction R f)) ≫
          (preservesColimitIso (ModuleCat.restrictScalars (R.map f)) (F ⋙ evaluation R Y)).inv) ≫
        (ModuleCat.restrictScalars (R.map f)).map
            (colimMap (whiskerLeft F (restriction R g)) ≫
              (preservesColimitIso (ModuleCat.restrictScalars (R.map g)) (F ⋙ evaluation R Z)).inv) ≫
          (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
tactic: dsimp
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ colimit.ι (F ⋙ evaluation R X) j ≫
      colimMap (whiskerLeft F (restriction R (f ≫ g))) ≫
        (preservesColimitIso (ModuleCat.restrictScalars (R.map (f ≫ g))) (F ⋙ evaluation R Z)).inv =
    colimit.ι (F ⋙ evaluation R X) j ≫
      (colimMap (whiskerLeft F (restriction R f)) ≫
          (preservesColimitIso (ModuleCat.restrictScalars (R.map f)) (F ⋙ evaluation R Y)).inv) ≫
        (ModuleCat.restrictScalars (R.map f)).map
            (colimMap (whiskerLeft F (restriction R g)) ≫
              (preservesColimitIso (ModuleCat.restrictScalars (R.map g)) (F ⋙ evaluation R Z)).inv) ≫
          (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ restrictionApp (f ≫ g) (F.obj j) ≫
      colimit.ι (F ⋙ evaluation R Z ⋙ ModuleCat.restrictScalars (R.map (f ≫ g))) j ≫
        (preservesColimitIso (ModuleCat.restrictScalars (R.map (f ≫ g))) (F ⋙ evaluation R Z)).inv =
    (whiskerLeft F (restriction R f)).app j ≫
      colimit.ι (F ⋙ evaluation R Y ⋙ ModuleCat.restrictScalars (R.map f)) j ≫
        (preservesColimitIso (ModuleCat.restrictScalars (R.map f)) (F ⋙ evaluation R Y)).inv ≫
          (ModuleCat.restrictScalars (R.map f)).map
              (colimMap (whiskerLeft F (restriction R g)) ≫
                (preservesColimitIso (ModuleCat.restrictScalars (R.map g)) (F ⋙ evaluation R Z)).inv) ≫
            (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
tactic: rw [ι_colimMap_assoc, whiskerLeft_app, restriction_app, assoc, ι_colimMap_assoc]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ restrictionApp (f ≫ g) (F.obj j) ≫
      colimit.ι (F ⋙ evaluation R Z ⋙ ModuleCat.restrictScalars (R.map (f ≫ g))) j ≫
        (preservesColimitIso (ModuleCat.restrictScalars (R.map (f ≫ g))) (F ⋙ evaluation R Z)).inv =
    (whiskerLeft F (restriction R f)).app j ≫
      colimit.ι (F ⋙ evaluation R Y ⋙ ModuleCat.restrictScalars (R.map f)) j ≫
        (preservesColimitIso (ModuleCat.restrictScalars (R.map f)) (F ⋙ evaluation R Y)).inv ≫
          (ModuleCat.restrictScalars (R.map f)).map
              (colimMap (whiskerLeft F (restriction R g)) ≫
                (preservesColimitIso (ModuleCat.restrictScalars (R.map g)) (F ⋙ evaluation R Z)).inv) ≫
            (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ restrictionApp (f ≫ g) (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map (f ≫ g))).map (colimit.ι (F ⋙ evaluation R Z) j) =
    (whiskerLeft F (restriction R f)).app j ≫
      (ModuleCat.restrictScalars (R.map f)).map (colimit.ι (F ⋙ evaluation R Y) j) ≫
        (ModuleCat.restrictScalars (R.map f)).map
            (colimMap (whiskerLeft F (restriction R g)) ≫
              (preservesColimitIso (ModuleCat.restrictScalars (R.map g)) (F ⋙ evaluation R Z)).inv) ≫
          (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
tactic: erw [ι_preservesColimitsIso_inv (G := ModuleCat.restrictScalars (R.map (f ≫ g))),
      ι_preservesColimitsIso_inv_assoc (G := ModuleCat.restrictScalars (R.map f))]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ restrictionApp (f ≫ g) (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map (f ≫ g))).map (colimit.ι (F ⋙ evaluation R Z) j) =
    (whiskerLeft F (restriction R f)).app j ≫
      (ModuleCat.restrictScalars (R.map f)).map (colimit.ι (F ⋙ evaluation R Y) j) ≫
        (ModuleCat.restrictScalars (R.map f)).map
            (colimMap (whiskerLeft F (restriction R g)) ≫
              (preservesColimitIso (ModuleCat.restrictScalars (R.map g)) (F ⋙ evaluation R Z)).inv) ≫
          (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ restrictionApp (f ≫ g) (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map (f ≫ g))).map (colimit.ι (F ⋙ evaluation R Z) j) =
    (whiskerLeft F (restriction R f)).app j ≫
      (ModuleCat.restrictScalars (R.map f)).map
          ((whiskerLeft F (restriction R g)).app j ≫
            colimit.ι (F ⋙ evaluation R Z ⋙ ModuleCat.restrictScalars (R.map g)) j ≫
              (preservesColimitIso (ModuleCat.restrictScalars (R.map g)) (F ⋙ evaluation R Z)).inv) ≫
        (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
tactic: rw [← Functor.map_comp_assoc, ι_colimMap_assoc]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ restrictionApp (f ≫ g) (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map (f ≫ g))).map (colimit.ι (F ⋙ evaluation R Z) j) =
    (whiskerLeft F (restriction R f)).app j ≫
      (ModuleCat.restrictScalars (R.map f)).map
          ((whiskerLeft F (restriction R g)).app j ≫
            colimit.ι (F ⋙ evaluation R Z ⋙ ModuleCat.restrictScalars (R.map g)) j ≫
              (preservesColimitIso (ModuleCat.restrictScalars (R.map g)) (F ⋙ evaluation R Z)).inv) ≫
        (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ restrictionApp (f ≫ g) (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map (f ≫ g))).map (colimit.ι (F ⋙ evaluation R Z) j) =
    (whiskerLeft F (restriction R f)).app j ≫
      (ModuleCat.restrictScalars (R.map f)).map
          ((whiskerLeft F (restriction R g)).app j ≫
            (ModuleCat.restrictScalars (R.map g)).map (colimit.ι (F ⋙ evaluation R Z) j)) ≫
        (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
tactic: erw [ι_preservesColimitsIso_inv (G := ModuleCat.restrictScalars (R.map g))]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ restrictionApp (f ≫ g) (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map (f ≫ g))).map (colimit.ι (F ⋙ evaluation R Z) j) =
    (whiskerLeft F (restriction R f)).app j ≫
      (ModuleCat.restrictScalars (R.map f)).map
          ((whiskerLeft F (restriction R g)).app j ≫
            (ModuleCat.restrictScalars (R.map g)).map (colimit.ι (F ⋙ evaluation R Z) j)) ≫
        (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ restrictionApp f (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map f)).map (restrictionApp g (F.obj j)) ≫
        (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ ((F.obj j).obj Z)).inv ≫
          (ModuleCat.restrictScalars (R.map (f ≫ g))).map (colimit.ι (F ⋙ evaluation R Z) j) =
    restrictionApp f (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map f)).map
          (restrictionApp g (F.obj j) ≫ (ModuleCat.restrictScalars (R.map g)).map (colimit.ι (F ⋙ evaluation R Z) j)) ≫
        (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
tactic: rw [restrictionApp_comp, ModuleCat.restrictScalarsComp'_inv_app, assoc, assoc,
      whiskerLeft_app, whiskerLeft_app, restriction_app, restriction_app]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ restrictionApp f (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map f)).map (restrictionApp g (F.obj j)) ≫
        (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ ((F.obj j).obj Z)).inv ≫
          (ModuleCat.restrictScalars (R.map (f ≫ g))).map (colimit.ι (F ⋙ evaluation R Z) j) =
    restrictionApp f (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map f)).map
          (restrictionApp g (F.obj j) ≫ (ModuleCat.restrictScalars (R.map g)).map (colimit.ι (F ⋙ evaluation R Z) j)) ≫
        (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ restrictionApp f (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map f)).map (restrictionApp g (F.obj j)) ≫
        (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ ((F.obj j).obj Z)).inv ≫
          (ModuleCat.restrictScalars (R.map (f ≫ g))).map (colimit.ι (F ⋙ evaluation R Z) j) =
    restrictionApp f (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map f)).map (restrictionApp g (F.obj j)) ≫
        (ModuleCat.restrictScalars (R.map f)).map
            ((ModuleCat.restrictScalars (R.map g)).map (colimit.ι (F ⋙ evaluation R Z) j)) ≫
          (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
tactic: simp only [Functor.map_comp, assoc]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
R : Cᵒᵖ ⥤ RingCat
J : Type u₂
inst✝² : Category.{v₂, u₂} J
F : J ⥤ PresheafOfModules R
inst✝¹ : {X Y : Cᵒᵖ} → (f : X ⟶ Y) → PreservesColimit (F ⋙ evaluation R Y) (ModuleCat.restrictScalars (R.map f))
inst✝ : ∀ (X : Cᵒᵖ), HasColimit (F ⋙ evaluation R X)
X Y Z : Cᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
j : J
⊢ restrictionApp f (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map f)).map (restrictionApp g (F.obj j)) ≫
        (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ ((F.obj j).obj Z)).inv ≫
          (ModuleCat.restrictScalars (R.map (f ≫ g))).map (colimit.ι (F ⋙ evaluation R Z) j) =
    restrictionApp f (F.obj j) ≫
      (ModuleCat.restrictScalars (R.map f)).map (restrictionApp g (F.obj j)) ≫
        (ModuleCat.restrictScalars (R.map f)).map
            ((ModuleCat.restrictScalars (R.map g)).map (colimit.ι (F ⋙ evaluation R Z) j)) ≫
          (ModuleCat.restrictScalarsComp'App (R.map f) (R.map g) (R.map (f ≫ g)) ⋯ (colimit (F ⋙ evaluation R Z))).inv
state_after: no goals
tactic: rfl