Theorem: TopCat.Sheaf.eq_of_locally_eq'
File: Mathlib/Topology/Sheaves/SheafCondition/UniqueGluing.lean

tactic: have V_eq_supr_U : V = iSup U := le_antisymm hcover (iSup_le fun i => (iUV i).le)
state_before: C : Type u
inst✝⁴ : Category C
inst✝³ : ConcreteCategory C
inst✝² : HasLimits C
inst✝¹ : ReflectsIsomorphisms ConcreteCategory.forget
inst✝ : PreservesLimits ConcreteCategory.forget
X : TopCat
F : Sheaf C X
ι : Type v
U : ι → Opens ↑X
V : Opens ↑X
iUV : (i : ι) → U i ⟶ V
hcover : V ≤ iSup U
s t : (CategoryTheory.forget C).obj (F.val.obj V.op)
h :
  ∀ (i : ι),
    (CategoryTheory.forget C).map (F.val.map (iUV i).op) s = (CategoryTheory.forget C).map (F.val.map (iUV i).op) t
⊢ s = t

tactic: suffices F.1.map (eqToHom V_eq_supr_U.symm).op s = F.1.map (eqToHom V_eq_supr_U.symm).op t by
  convert congr_arg (F.1.map (eqToHom V_eq_supr_U).op) this <;>
  rw [← comp_apply, ← F.1.map_comp, eqToHom_op, eqToHom_op, eqToHom_trans, eqToHom_refl,
    F.1.map_id, id_apply]
state_before: C : Type u
inst✝⁴ : Category C
inst✝³ : ConcreteCategory C
inst✝² : HasLimits C
inst✝¹ : ReflectsIsomorphisms ConcreteCategory.forget
inst✝ : PreservesLimits ConcreteCategory.forget
X : TopCat
F : Sheaf C X
ι : Type v
U : ι → Opens ↑X
V : Opens ↑X
iUV : (i : ι) → U i ⟶ V
hcover : V ≤ iSup U
s t : (CategoryTheory.forget C).obj (F.val.obj V.op)
h :
  ∀ (i : ι),
    (CategoryTheory.forget C).map (F.val.map (iUV i).op) s = (CategoryTheory.forget C).map (F.val.map (iUV i).op) t
V_eq_supr_U : V = iSup U
⊢ s = t

tactic: apply eq_of_locally_eq
state_before: C : Type u
inst✝⁴ : Category C
inst✝³ : ConcreteCategory C
inst✝² : HasLimits C
inst✝¹ : ReflectsIsomorphisms ConcreteCategory.forget
inst✝ : PreservesLimits ConcreteCategory.forget
X : TopCat
F : Sheaf C X
ι : Type v
U : ι → Opens ↑X
V : Opens ↑X
iUV : (i : ι) → U i ⟶ V
hcover : V ≤ iSup U
s t : (CategoryTheory.forget C).obj (F.val.obj V.op)
h :
  ∀ (i : ι),
    (CategoryTheory.forget C).map (F.val.map (iUV i).op) s = (CategoryTheory.forget C).map (F.val.map (iUV i).op) t
V_eq_supr_U : V = iSup U
⊢ (CategoryTheory.forget C).map (F.val.map (eqToHom (_ : iSup U = V)).op) s =
    (CategoryTheory.forget C).map (F.val.map (eqToHom (_ : iSup U = V)).op) t

tactic: intro i
state_before: case h
C : Type u
inst✝⁴ : Category C
inst✝³ : ConcreteCategory C
inst✝² : HasLimits C
inst✝¹ : ReflectsIsomorphisms ConcreteCategory.forget
inst✝ : PreservesLimits ConcreteCategory.forget
X : TopCat
F : Sheaf C X
ι : Type v
U : ι → Opens ↑X
V : Opens ↑X
iUV : (i : ι) → U i ⟶ V
hcover : V ≤ iSup U
s t : (CategoryTheory.forget C).obj (F.val.obj V.op)
h :
  ∀ (i : ι),
    (CategoryTheory.forget C).map (F.val.map (iUV i).op) s = (CategoryTheory.forget C).map (F.val.map (iUV i).op) t
V_eq_supr_U : V = iSup U
⊢ ∀ (i : ι),
    (CategoryTheory.forget C).map (F.val.map (leSupr U i).op)
        ((CategoryTheory.forget C).map (F.val.map (eqToHom (_ : iSup U = V)).op) s) =
      (CategoryTheory.forget C).map (F.val.map (leSupr U i).op)
        ((CategoryTheory.forget C).map (F.val.map (eqToHom (_ : iSup U = V)).op) t)

tactic: rw [← comp_apply, ← comp_apply, ← F.1.map_comp]
state_before: case h
C : Type u
inst✝⁴ : Category C
inst✝³ : ConcreteCategory C
inst✝² : HasLimits C
inst✝¹ : ReflectsIsomorphisms ConcreteCategory.forget
inst✝ : PreservesLimits ConcreteCategory.forget
X : TopCat
F : Sheaf C X
ι : Type v
U : ι → Opens ↑X
V : Opens ↑X
iUV : (i : ι) → U i ⟶ V
hcover : V ≤ iSup U
s t : (CategoryTheory.forget C).obj (F.val.obj V.op)
h :
  ∀ (i : ι),
    (CategoryTheory.forget C).map (F.val.map (iUV i).op) s = (CategoryTheory.forget C).map (F.val.map (iUV i).op) t
V_eq_supr_U : V = iSup U
i : ι
⊢ (CategoryTheory.forget C).map (F.val.map (leSupr U i).op)
      ((CategoryTheory.forget C).map (F.val.map (eqToHom (_ : iSup U = V)).op) s) =
    (CategoryTheory.forget C).map (F.val.map (leSupr U i).op)
      ((CategoryTheory.forget C).map (F.val.map (eqToHom (_ : iSup U = V)).op) t)

tactic: convert h i
state_before: case h
C : Type u
inst✝⁴ : Category C
inst✝³ : ConcreteCategory C
inst✝² : HasLimits C
inst✝¹ : ReflectsIsomorphisms ConcreteCategory.forget
inst✝ : PreservesLimits ConcreteCategory.forget
X : TopCat
F : Sheaf C X
ι : Type v
U : ι → Opens ↑X
V : Opens ↑X
iUV : (i : ι) → U i ⟶ V
hcover : V ≤ iSup U
s t : (CategoryTheory.forget C).obj (F.val.obj V.op)
h :
  ∀ (i : ι),
    (CategoryTheory.forget C).map (F.val.map (iUV i).op) s = (CategoryTheory.forget C).map (F.val.map (iUV i).op) t
V_eq_supr_U : V = iSup U
i : ι
⊢ (CategoryTheory.forget C).map (F.val.map ((eqToHom (_ : iSup U = V)).op ≫ (leSupr U i).op)) s =
    (CategoryTheory.forget C).map (F.val.map ((eqToHom (_ : iSup U = V)).op ≫ (leSupr U i).op)) t

tactic: convert congr_arg (F.1.map (eqToHom V_eq_supr_U).op) this <;>
rw [← comp_apply, ← F.1.map_comp, eqToHom_op, eqToHom_op, eqToHom_trans, eqToHom_refl,
  F.1.map_id, id_apply]
state_before: C : Type u
inst✝⁴ : Category C
inst✝³ : ConcreteCategory C
inst✝² : HasLimits C
inst✝¹ : ReflectsIsomorphisms ConcreteCategory.forget
inst✝ : PreservesLimits ConcreteCategory.forget
X : TopCat
F : Sheaf C X
ι : Type v
U : ι → Opens ↑X
V : Opens ↑X
iUV : (i : ι) → U i ⟶ V
hcover : V ≤ iSup U
s t : (CategoryTheory.forget C).obj (F.val.obj V.op)
h :
  ∀ (i : ι),
    (CategoryTheory.forget C).map (F.val.map (iUV i).op) s = (CategoryTheory.forget C).map (F.val.map (iUV i).op) t
V_eq_supr_U : V = iSup U
this :
  (CategoryTheory.forget C).map (F.val.map (eqToHom (_ : iSup U = V)).op) s =
    (CategoryTheory.forget C).map (F.val.map (eqToHom (_ : iSup U = V)).op) t
⊢ s = t