Theorem: TopCat.Presheaf.app_isIso_of_stalkFunctor_map_iso
File: Mathlib/Topology/Sheaves/Stalks.lean

tactic: suffices IsIso ((forget C).map (f.1.app (op U))) by
  exact isIso_of_reflects_iso (f.1.app (op U)) (forget C)
state_before: C : Type u
inst✝⁷ : Category C
inst✝⁶ : HasColimits C
X Y Z : TopCat
inst✝⁵ : ConcreteCategory C
inst✝⁴ : PreservesFilteredColimits (forget C)
inst✝³ : HasLimits C
inst✝² : PreservesLimits (forget C)
inst✝¹ : ReflectsIsomorphisms (forget C)
F G : Sheaf C X
f : F ⟶ G
U : Opens ↑X
inst✝ : ∀ (x : { x // x ∈ U }), IsIso ((stalkFunctor C ↑x).map f.val)
⊢ IsIso (f.val.app U.op)

tactic: rw [isIso_iff_bijective]
state_before: C : Type u
inst✝⁷ : Category C
inst✝⁶ : HasColimits C
X Y Z : TopCat
inst✝⁵ : ConcreteCategory C
inst✝⁴ : PreservesFilteredColimits (forget C)
inst✝³ : HasLimits C
inst✝² : PreservesLimits (forget C)
inst✝¹ : ReflectsIsomorphisms (forget C)
F G : Sheaf C X
f : F ⟶ G
U : Opens ↑X
inst✝ : ∀ (x : { x // x ∈ U }), IsIso ((stalkFunctor C ↑x).map f.val)
⊢ IsIso ((forget C).map (f.val.app U.op))

tactic: apply app_bijective_of_stalkFunctor_map_bijective
state_before: C : Type u
inst✝⁷ : Category C
inst✝⁶ : HasColimits C
X Y Z : TopCat
inst✝⁵ : ConcreteCategory C
inst✝⁴ : PreservesFilteredColimits (forget C)
inst✝³ : HasLimits C
inst✝² : PreservesLimits (forget C)
inst✝¹ : ReflectsIsomorphisms (forget C)
F G : Sheaf C X
f : F ⟶ G
U : Opens ↑X
inst✝ : ∀ (x : { x // x ∈ U }), IsIso ((stalkFunctor C ↑x).map f.val)
⊢ Function.Bijective ((forget C).map (f.val.app U.op))

tactic: intro x
state_before: case h
C : Type u
inst✝⁷ : Category C
inst✝⁶ : HasColimits C
X Y Z : TopCat
inst✝⁵ : ConcreteCategory C
inst✝⁴ : PreservesFilteredColimits (forget C)
inst✝³ : HasLimits C
inst✝² : PreservesLimits (forget C)
inst✝¹ : ReflectsIsomorphisms (forget C)
F G : Sheaf C X
f : F ⟶ G
U : Opens ↑X
inst✝ : ∀ (x : { x // x ∈ U }), IsIso ((stalkFunctor C ↑x).map f.val)
⊢ ∀ (x : { x // x ∈ U }), Function.Bijective ((forget C).map ((stalkFunctor C ↑x).map f.val))

tactic: apply (isIso_iff_bijective _).mp
state_before: case h
C : Type u
inst✝⁷ : Category C
inst✝⁶ : HasColimits C
X Y Z : TopCat
inst✝⁵ : ConcreteCategory C
inst✝⁴ : PreservesFilteredColimits (forget C)
inst✝³ : HasLimits C
inst✝² : PreservesLimits (forget C)
inst✝¹ : ReflectsIsomorphisms (forget C)
F G : Sheaf C X
f : F ⟶ G
U : Opens ↑X
inst✝ : ∀ (x : { x // x ∈ U }), IsIso ((stalkFunctor C ↑x).map f.val)
x : { x // x ∈ U }
⊢ Function.Bijective ((forget C).map ((stalkFunctor C ↑x).map f.val))

tactic: exact Functor.map_isIso (forget C) ((stalkFunctor C x.1).map f.1)
state_before: case h
C : Type u
inst✝⁷ : Category C
inst✝⁶ : HasColimits C
X Y Z : TopCat
inst✝⁵ : ConcreteCategory C
inst✝⁴ : PreservesFilteredColimits (forget C)
inst✝³ : HasLimits C
inst✝² : PreservesLimits (forget C)
inst✝¹ : ReflectsIsomorphisms (forget C)
F G : Sheaf C X
f : F ⟶ G
U : Opens ↑X
inst✝ : ∀ (x : { x // x ∈ U }), IsIso ((stalkFunctor C ↑x).map f.val)
x : { x // x ∈ U }
⊢ IsIso ((forget C).map ((stalkFunctor C ↑x).map f.val))

tactic: exact isIso_of_reflects_iso (f.1.app (op U)) (forget C)
state_before: C : Type u
inst✝⁷ : Category C
inst✝⁶ : HasColimits C
X Y Z : TopCat
inst✝⁵ : ConcreteCategory C
inst✝⁴ : PreservesFilteredColimits (forget C)
inst✝³ : HasLimits C
inst✝² : PreservesLimits (forget C)
inst✝¹ : ReflectsIsomorphisms (forget C)
F G : Sheaf C X
f : F ⟶ G
U : Opens ↑X
inst✝ : ∀ (x : { x // x ∈ U }), IsIso ((stalkFunctor C ↑x).map f.val)
this : IsIso ((forget C).map (f.val.app U.op))
⊢ IsIso (f.val.app U.op)