Theorem: CategoryTheory.CoverDense.Types.pushforwardFamily_apply
File: Mathlib/CategoryTheory/Sites/DenseSubsite.lean

tactic: unfold pushforwardFamily
state_before: C : Type u_4
inst✝⁴ : Category C
D : Type u_2
inst✝³ : Category D
E : Type ?u.57720
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type ?u.57772
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ Type v
ℱ' : SheafOfTypes K
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : D
x : ℱ.obj X.op
Y : C
f : G.obj Y ⟶ X
⊢ pushforwardFamily α x f (_ : coverByImage G X f) = α.app Y.op (ℱ.map f.op x)

tactic: refine' congr_fun (_ :
  (fun t => ℱ'.val.map ((Nonempty.some (_ : coverByImage G X f)).lift.op)
    (α.app (op (Nonempty.some (_ : coverByImage G X f)).1)
      (ℱ.map ((Nonempty.some (_ : coverByImage G X f)).map.op) t))) =
  (fun t => α.app (op Y) (ℱ.map (f.op) t))) x
state_before: C : Type u_4
inst✝⁴ : Category C
D : Type u_2
inst✝³ : Category D
E : Type ?u.57720
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type ?u.57772
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ Type v
ℱ' : SheafOfTypes K
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : D
x : ℱ.obj X.op
Y : C
f : G.obj Y ⟶ X
⊢ ℱ'.val.map (Nonempty.some (_ : coverByImage G X f)).lift.op
      (α.app (Nonempty.some (_ : coverByImage G X f)).1.op (ℱ.map (Nonempty.some (_ : coverByImage G X f)).map.op x)) =
    α.app Y.op (ℱ.map f.op x)

tactic: rw [← G.image_preimage (Nonempty.some _ : Presieve.CoverByImageStructure _ _).lift]
state_before: C : Type u_4
inst✝⁴ : Category C
D : Type u_2
inst✝³ : Category D
E : Type ?u.57720
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type ?u.57772
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ Type v
ℱ' : SheafOfTypes K
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : D
x : ℱ.obj X.op
Y : C
f : G.obj Y ⟶ X
⊢ (fun t =>
      ℱ'.val.map (Nonempty.some (_ : coverByImage G X f)).lift.op
        (α.app (Nonempty.some (_ : coverByImage G X f)).obj.op
          (ℱ.map (Nonempty.some (_ : coverByImage G X f)).map.op t))) =
    fun t => α.app Y.op (ℱ.map f.op t)

tactic: change ℱ.map _ ≫ α.app (op _) ≫ ℱ'.val.map _ = ℱ.map f.op ≫ α.app (op Y)
state_before: C : Type u_4
inst✝⁴ : Category C
D : Type u_2
inst✝³ : Category D
E : Type ?u.57720
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type ?u.57772
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ Type v
ℱ' : SheafOfTypes K
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : D
x : ℱ.obj X.op
Y : C
f : G.obj Y ⟶ X
⊢ (fun t =>
      ℱ'.val.map (G.map (G.preimage (Nonempty.some (_ : coverByImage G X f)).lift)).op
        (α.app (Nonempty.some (_ : coverByImage G X f)).obj.op
          (ℱ.map (Nonempty.some (_ : coverByImage G X f)).map.op t))) =
    fun t => α.app Y.op (ℱ.map f.op t)

tactic: erw [← α.naturality (G.preimage _).op]
state_before: C : Type u_4
inst✝⁴ : Category C
D : Type u_2
inst✝³ : Category D
E : Type ?u.57720
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type ?u.57772
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ Type v
ℱ' : SheafOfTypes K
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : D
x : ℱ.obj X.op
Y : C
f : G.obj Y ⟶ X
⊢ ℱ.map (Nonempty.some (_ : coverByImage G X f)).map.op ≫
      α.app (Nonempty.some (_ : coverByImage G X f)).1.op ≫
        ℱ'.val.map (G.map (G.preimage (Nonempty.some (_ : coverByImage G X f)).lift)).op =
    ℱ.map f.op ≫ α.app Y.op

tactic: simp only [← Functor.map_comp, ← Category.assoc, Functor.comp_map, G.image_preimage, G.op_map,
  Quiver.Hom.unop_op, ← op_comp, Presieve.CoverByImageStructure.fac]
state_before: C : Type u_4
inst✝⁴ : Category C
D : Type u_2
inst✝³ : Category D
E : Type ?u.57720
inst✝² : Category E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type ?u.57772
inst✝¹ : Category A
G : C ⥤ D
H : CoverDense K G
inst✝ : Full G
ℱ : Dᵒᵖ ⥤ Type v
ℱ' : SheafOfTypes K
α : Functor.op G ⋙ ℱ ⟶ Functor.op G ⋙ ℱ'.val
X : D
x : ℱ.obj X.op
Y : C
f : G.obj Y ⟶ X
⊢ ℱ.map (Nonempty.some (_ : coverByImage G X f)).map.op ≫
      (Functor.op G ⋙ ℱ).map (G.preimage (Nonempty.some (_ : coverByImage G X f)).lift).op ≫ α.app Y.op =
    ℱ.map f.op ≫ α.app Y.op