-----
> [!proposition] Proposition. ([[sheaf isomorphism iff isomorphism on stalks]])
> Let $\mathcal{F}$, $\mathcal{G}$ be [[sheaf|sheaves]] on a [[topological space]] $X$ and let $f:\mathcal{F} \to \mathcal{G}$ be a [[morphism of (pre)sheaves|morphism]] between them. Then $f$ is an [[isomorphism]] if and only if the [[(pre)sheaf stalk|stalk map]] $f_{p}$ is an [[isomorphism]] for all $p \in X$.
^proposition
> [!Note] Remark.
> If $f_{p}$ is an [[injection]] for all $p \in X$, then the proof below ends up implying that $f$ is an [[injection]]. However, just having that $f_{p}$ is a [[surjection]] for all $p \in X$ is *not enough* to conclude $f$ is a [[surjection]]! This asymmetry is, in some sense, core to sheaf theory.
^justification
> [!basicnonexample] Warning.
> This does *not* say that 'isomorphic stalks implies isomorphic sheaves'.
^nonexample
> [!proof]- Proof. ([[sheaf isomorphism iff isomorphism on stalks]])
> $\implies$. Suppose $f$ is an [[isomorphism]] with inverse $g$. Then $g_{p}$ is inverse to $f_{p}$ for all $p$, e.g. a right-inverse because
> $g_{p }\circ f_{p}\big( [(U, s)] \big)=g_{p} ([U, f_{U}(s)])=[(U, g_{U} \circ f_{U}(s))]=[(U, s)].$
>
> $\impliedby$. Suppose each $f_{p}$ is an [[isomorphism]]. We need to show that $f_{U}:\mathcal{F}(U) \to \mathcal{G}(U)$ is an [[isomorphism]] for all open $U \subset X$. Once we have that, we'll be able to define the inverse to $f$ by $g_{U}=(f ^{-1})_{U}:=f_{U}^{-1}$. (And then we'll have to check that this is compatible with restrictions.)
>
> It is enough to verify injectivity and surjectivity (I think this requires us to be restricting focus to sheaves of groups or some category where I+S->Isomorphism).
>
> **Injectivity.** suppose $s \in \mathcal{F}(U)$ and $f_{U}(s)=0$. WTS $s=0$. We know that for all $p \in U$, $f_{p}\big( \underbrace{[U,s]}_{s_{p}} \big)=[U, \cancel{f_{U}(s)}^{0}]$ is the germ $0 \in \mathcal{G}_{p}$. Since Since $f_{p}$ is an [[injection]], $s_{p}$ is (equivalent to) the zero element. This means there exists an open neighborhood of $V_{p}\ni p$ such that $s |_{V_{p}}=0$.[^1] But $\{ V_{p} \}_{p \in U}$ [[cover|openly covers]] $U$, and so the sheaf locality axiom implies $s=0$ globally.
>
> **Surjectivity (needs injectivity to prove![^2]).** Let $t \in \mathcal{G}(U)$. Then for all $p \in U$, there exists a germ $s_{p} \in \mathcal{F}_{p}$ such that $f_{p}(s_{p})=t_{p}$ (since each $f_{p}$ is a [[surjection]]). This means there exists a [[neighborhood]] $V_{p}$ of $p \in U$ $\fa p \in U$ and a germ $[V_{p}, \tilde{s}_{p}]$ representing $s_{p}$ such that $(V_{p}, f_{V_{p}}(\tilde{s}_{p})) \sim \underbrace{(U, t)}_{t_{p}}$. Shrinking $V_{p}$ if necessary, we can assume that $f_{V_{p}}(\tilde{s}_{p})=t |_{V_{p}}$. Taking $\{ V_{p} \}_{p \in U}$ an open cover of $U$, we may now want to try gluing together all the $\tilde{s}_{p}$. This is a bit subtle, and in fact we will need to use the already-proven injectivity to make it work out. On the overlaps $V_{p} \cap V_{q}$, $f_{V_{p} \cap V_{q}}(\tilde{s}_{p} |_{V_{p} \cap V_{q}}- \tilde{s}_{q} |_{V_{p} \cap V_{q}})=t |_{V_{p} \cap V_{q}}-t |_{V_{p} \cap V_{q}}=0$. Since we've shown the maps $f_{V_{p}\cap V_{q}}$ are all [[injection|injective]], we have $\tilde{s}_{p} |_{V_{p} \cap V_{q}}-\tilde{s}_{q}|_{V_{p} \cap V_{q}}=0$ and thus agreement on intersections indeed holds, so the gluing axiom produces $s \in \mathcal{F}(U)$ satisfying $s |_{V_{p}}=\tilde{s}_{p}$ for all $p$. We want to show $f_{U}(s)=t$. Looking at the [[natural transformation|naturality square]] for $U$, we see that $f_{U}(s) |_{V_{p}}=f_{V_{p}}(s |_{V_{p}})=f_{V_{p}}(\tilde{s}_{p})=t |_{V_{p}}$. Thus, $f_{U}(s)$ and $t$ agree on restrictions on the cover $\{ V_{p} \}$, and the desired result follows from locality.
>
-----
####
[^1]: $(U,s) \sim (V_{p},0)$. This type of observation is common: having a germ $s_{p}$ vanish really just means $s$ vanishes on a sufficiently small neighborhood of the point $s_{p}$.
[^2]: Thus the remark in the proposition statement.
----
Can we patch the $s_p$ all together?
#### References
> [!backlink]
> ```dataview
> TABLE rows.file.link as "Further Reading"
> FROM [[]]
> FLATTEN file.tags as Tag
> WHERE Tag = "#definition" OR Tag = "#theorem" OR Tag = "#MOC" OR Tag = "#proposition" OR Tag = "#axiom"
> GROUP BY Tag
> ```
> [!frontlink]
> ```dataview
> TABLE rows.file.link as "Further Reading"
> FROM outgoing([[]])
> FLATTEN file.tags as Tag
> WHERE Tag = "#definition" OR Tag = "#theorem" OR Tag = "#MOC" OR Tag = "#proposition" OR Tag = "#axiom"
> GROUP BY Tag
> ```