Theorem: AlgebraicGeometry.SheafedSpace.hom_stalk_ext
File: Mathlib/Geometry/RingedSpace/SheafedSpace.lean

Proof steps:
state_before: C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
f g : X ⟶ Y
h : f.base = g.base
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    PresheafedSpace.Hom.stalkMap f x = (Y.presheaf.stalkCongr ⋯).hom ≫ PresheafedSpace.Hom.stalkMap g x
⊢ f = g
state_after: case mk
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
g : X ⟶ Y
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
h : { base := f, c := fc }.base = g.base
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ PresheafedSpace.Hom.stalkMap g x
⊢ { base := f, c := fc } = g
tactic: obtain ⟨f, fc⟩ := f
state_before: case mk
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
g : X ⟶ Y
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
h : { base := f, c := fc }.base = g.base
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ PresheafedSpace.Hom.stalkMap g x
⊢ { base := f, c := fc } = g
state_after: case mk.mk
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
g : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
gc : Y.presheaf ⟶ (pushforward C g).obj X.presheaf
h : { base := f, c := fc }.base = { base := g, c := gc }.base
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ { base := g, c := gc }.stalkMap x
⊢ { base := f, c := fc } = { base := g, c := gc }
tactic: obtain ⟨g, gc⟩ := g
state_before: case mk.mk
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
g : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
gc : Y.presheaf ⟶ (pushforward C g).obj X.presheaf
h : { base := f, c := fc }.base = { base := g, c := gc }.base
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ { base := g, c := gc }.stalkMap x
⊢ { base := f, c := fc } = { base := g, c := gc }
state_after: case mk.mk
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc gc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ { base := f, c := gc }.stalkMap x
⊢ { base := f, c := fc } = { base := f, c := gc }
tactic: obtain rfl : f = g := h
state_before: case mk.mk
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc gc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ { base := f, c := gc }.stalkMap x
⊢ { base := f, c := fc } = { base := f, c := gc }
state_after: case mk.mk.e_c
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc gc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ { base := f, c := gc }.stalkMap x
⊢ fc = gc
tactic: congr
state_before: case mk.mk.e_c
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc gc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ { base := f, c := gc }.stalkMap x
⊢ fc = gc
state_after: case mk.mk.e_c.w.w
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc gc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ { base := f, c := gc }.stalkMap x
U : Opens ↑↑Y.toPresheafedSpace
s : (CategoryTheory.forget C).obj (Y.presheaf.obj (op U))
⊢ (fc.app (op U)) s = (gc.app (op U)) s
tactic: ext U s
state_before: case mk.mk.e_c.w.w
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc gc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ { base := f, c := gc }.stalkMap x
U : Opens ↑↑Y.toPresheafedSpace
s : (CategoryTheory.forget C).obj (Y.presheaf.obj (op U))
⊢ (fc.app (op U)) s = (gc.app (op U)) s
state_after: case mk.mk.e_c.w.w
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc gc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ { base := f, c := gc }.stalkMap x
U : Opens ↑↑Y.toPresheafedSpace
s : (CategoryTheory.forget C).obj (Y.presheaf.obj (op U))
x : ↥((Opens.map f).obj (unop (op U)))
⊢ (X.presheaf.germ x) ((fc.app (op U)) s) = (X.presheaf.germ x) ((gc.app (op U)) s)
tactic: refine section_ext X.sheaf _ _ _ fun x ↦ show X.presheaf.germ x _ = X.presheaf.germ x _ from ?_
state_before: case mk.mk.e_c.w.w
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc gc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ { base := f, c := gc }.stalkMap x
U : Opens ↑↑Y.toPresheafedSpace
s : (CategoryTheory.forget C).obj (Y.presheaf.obj (op U))
x : ↥((Opens.map f).obj (unop (op U)))
⊢ (X.presheaf.germ x) ((fc.app (op U)) s) = (X.presheaf.germ x) ((gc.app (op U)) s)
state_after: case mk.mk.e_c.w.w
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc gc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ { base := f, c := gc }.stalkMap x
U : Opens ↑↑Y.toPresheafedSpace
s : (CategoryTheory.forget C).obj (Y.presheaf.obj (op U))
x : ↥((Opens.map f).obj (unop (op U)))
⊢ ({ base := f, c := fc }.stalkMap ↑x) ((Y.presheaf.germ ⟨{ base := f, c := fc }.base ↑x, ⋯⟩) s) =
    ({ base := f, c := gc }.stalkMap ↑x) ((Y.presheaf.germ ⟨{ base := f, c := gc }.base ↑x, ⋯⟩) s)
tactic: erw [← PresheafedSpace.stalkMap_germ_apply ⟨f, fc⟩, ← PresheafedSpace.stalkMap_germ_apply ⟨f, gc⟩]
state_before: case mk.mk.e_c.w.w
C : Type u
inst✝⁶ : Category.{v, u} C
inst✝⁵ : ConcreteCategory C
inst✝⁴ : HasColimits C
inst✝³ : HasLimits C
inst✝² : PreservesLimits (CategoryTheory.forget C)
inst✝¹ : PreservesFilteredColimits (CategoryTheory.forget C)
inst✝ : (CategoryTheory.forget C).ReflectsIsomorphisms
X Y : SheafedSpace C
f : ↑X.toPresheafedSpace ⟶ ↑Y.toPresheafedSpace
fc gc : Y.presheaf ⟶ (pushforward C f).obj X.presheaf
h' :
  ∀ (x : ↑↑X.toPresheafedSpace),
    { base := f, c := fc }.stalkMap x = (Y.presheaf.stalkCongr ⋯).hom ≫ { base := f, c := gc }.stalkMap x
U : Opens ↑↑Y.toPresheafedSpace
s : (CategoryTheory.forget C).obj (Y.presheaf.obj (op U))
x : ↥((Opens.map f).obj (unop (op U)))
⊢ ({ base := f, c := fc }.stalkMap ↑x) ((Y.presheaf.germ ⟨{ base := f, c := fc }.base ↑x, ⋯⟩) s) =
    ({ base := f, c := gc }.stalkMap ↑x) ((Y.presheaf.germ ⟨{ base := f, c := gc }.base ↑x, ⋯⟩) s)
state_after: no goals
tactic: simp [h']