Theorem: CategoryTheory.GrothendieckTopology.Subpresheaf.sheafify_le
File: Mathlib/CategoryTheory/Sites/Subsheaf.lean

tactic: intro U x hx
state_before: C : Type u
inst✝ : Category C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
h : G ≤ G'
hF : Presieve.IsSheaf J F
hG' : Presieve.IsSheaf J (toPresheaf G')
⊢ sheafify J G ≤ G'

tactic: convert((G.sheafifyLift (Subpresheaf.homOfLe h) hG').app U ⟨x, hx⟩).2
state_before: C : Type u
inst✝ : Category C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
h : G ≤ G'
hF : Presieve.IsSheaf J F
hG' : Presieve.IsSheaf J (toPresheaf G')
U : Cᵒᵖ
x : F.obj U
hx : x ∈ obj (sheafify J G) U
⊢ x ∈ obj G' U

tactic: apply (hF _ hx).isSeparatedFor.ext
state_before: case h.e'_4
C : Type u
inst✝ : Category C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
h : G ≤ G'
hF : Presieve.IsSheaf J F
hG' : Presieve.IsSheaf J (toPresheaf G')
U : Cᵒᵖ
x : F.obj U
hx : x ∈ obj (sheafify J G) U
⊢ x = ↑((sheafifyLift G (homOfLe h) hG').app U { val := x, property := hx })

tactic: intro V i hi
state_before: case h.e'_4
C : Type u
inst✝ : Category C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
h : G ≤ G'
hF : Presieve.IsSheaf J F
hG' : Presieve.IsSheaf J (toPresheaf G')
U : Cᵒᵖ
x : F.obj U
hx : x ∈ obj (sheafify J G) U
⊢ ∀ ⦃Y : C⦄ ⦃f : Y ⟶ U.unop⦄,
    (sieveOfSection G x).arrows f →
      F.map f.op x = F.map f.op ↑((sheafifyLift G (homOfLe h) hG').app U { val := x, property := hx })

tactic: have :=
  congr_arg (fun f : G.toPresheaf ⟶ G'.toPresheaf => (NatTrans.app f (op V) ⟨_, hi⟩).1)
    (G.to_sheafifyLift (Subpresheaf.homOfLe h) hG')
state_before: case h.e'_4
C : Type u
inst✝ : Category C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
h : G ≤ G'
hF : Presieve.IsSheaf J F
hG' : Presieve.IsSheaf J (toPresheaf G')
U : Cᵒᵖ
x : F.obj U
hx : x ∈ obj (sheafify J G) U
V : C
i : V ⟶ U.unop
hi : (sieveOfSection G x).arrows i
⊢ F.map i.op x = F.map i.op ↑((sheafifyLift G (homOfLe h) hG').app U { val := x, property := hx })

tactic: convert this.symm
state_before: case h.e'_4
C : Type u
inst✝ : Category C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
h : G ≤ G'
hF : Presieve.IsSheaf J F
hG' : Presieve.IsSheaf J (toPresheaf G')
U : Cᵒᵖ
x : F.obj U
hx : x ∈ obj (sheafify J G) U
V : C
i : V ⟶ U.unop
hi : (sieveOfSection G x).arrows i
this :
  (fun f => ↑(f.app V.op { val := F.map i.op x, property := hi }))
      (homOfLe (_ : G ≤ sheafify J G) ≫ sheafifyLift G (homOfLe h) hG') =
    (fun f => ↑(f.app V.op { val := F.map i.op x, property := hi })) (homOfLe h)
⊢ F.map i.op x = F.map i.op ↑((sheafifyLift G (homOfLe h) hG').app U { val := x, property := hx })

tactic: erw [← Subpresheaf.nat_trans_naturality]
state_before: case h.e'_3
C : Type u
inst✝ : Category C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
h : G ≤ G'
hF : Presieve.IsSheaf J F
hG' : Presieve.IsSheaf J (toPresheaf G')
U : Cᵒᵖ
x : F.obj U
hx : x ∈ obj (sheafify J G) U
V : C
i : V ⟶ U.unop
hi : (sieveOfSection G x).arrows i
this :
  (fun f => ↑(f.app V.op { val := F.map i.op x, property := hi }))
      (homOfLe (_ : G ≤ sheafify J G) ≫ sheafifyLift G (homOfLe h) hG') =
    (fun f => ↑(f.app V.op { val := F.map i.op x, property := hi })) (homOfLe h)
⊢ F.map i.op ↑((sheafifyLift G (homOfLe h) hG').app U { val := x, property := hx }) =
    (fun f => ↑(f.app V.op { val := F.map i.op x, property := hi }))
      (homOfLe (_ : G ≤ sheafify J G) ≫ sheafifyLift G (homOfLe h) hG')

tactic: rfl
state_before: case h.e'_3
C : Type u
inst✝ : Category C
J : GrothendieckTopology C
F F' F'' : Cᵒᵖ ⥤ Type w
G G' : Subpresheaf F
h : G ≤ G'
hF : Presieve.IsSheaf J F
hG' : Presieve.IsSheaf J (toPresheaf G')
U : Cᵒᵖ
x : F.obj U
hx : x ∈ obj (sheafify J G) U
V : C
i : V ⟶ U.unop
hi : (sieveOfSection G x).arrows i
this :
  (fun f => ↑(f.app V.op { val := F.map i.op x, property := hi }))
      (homOfLe (_ : G ≤ sheafify J G) ≫ sheafifyLift G (homOfLe h) hG') =
    (fun f => ↑(f.app V.op { val := F.map i.op x, property := hi })) (homOfLe h)
⊢ ↑((sheafifyLift G (homOfLe h) hG').app V.op ((toPresheaf (sheafify J G)).map i.op { val := x, property := hx })) =
    (fun f => ↑(f.app V.op { val := F.map i.op x, property := hi }))
      (homOfLe (_ : G ≤ sheafify J G) ≫ sheafifyLift G (homOfLe h) hG')