Cogenerators of semilattices and lattices Let $\mathcal{C}$ be a category. We say that a set $S$ of objects of $\mathcal{C}$ is a cogenerating set for $\mathcal{C}$, if for any two objects $a, b \in \mathcal{C}$ and any two arrows $f, g: a \rightarrow b$ such that $f \neq g$ there is a $s \in S$ and an arrow $h: b \rightarrow s$ such that $h \circ f \neq h \circ g$.
For example singleton containing any two-point set is a cogenerating set for the category of sets with functions.
And my question is: what is a cogenerating set for the category of join semilattices with 0 (the smallest element) with semilattice homomorphisms preserving 0, resp. the category of lattices with 0 with lattice homomorphisms preserving 0?
 A: And my question is: what is a cogenerating set for the category of join semilattices with 0 (the smallest element) with semilattice homomorphisms preserving 0, resp. the category of lattices with 0 with lattice homomorphisms preserving 0?
Let ${\bf 2}$ be the $2$-element join semilattice with $0$. The set $\{{\bf 2}\}$ is a cogenerating set for the class of all join semilattices with zero. To see this, it suffices to show that if $A$ is a join semilattice with zero and $a, b\in A$ satisfy $a\not\leq b$, then there is a homomorphism $h\colon A\to {\bf 2}$ that separates $a$ and $b$. Take $h(x) = 0$ if $x\leq b$ and $h(x)=1$ otherwise. This works.
There is no cogenerating set for the class of all lattices with zero, because there are arbitrarily large simple lattices (e.g. partition lattices). If $S$ was a cogenerating $\underline{\rm set}$, then there would exist a simple lattice $P$ larger than any member of $S$. The identity homomorphism  $\iota\colon P\to P\colon x\mapsto x$ and the constant homomorphism $z\colon P\to P\colon x\mapsto 0$ cannot be separated by any homomorphism $h\colon P\to L$, $L\in S$, since any homomorphism from the large simple lattice $P$ to a member of $S$ will be constant.
