Note that one might want to do this, instead of using the category of sets, with some form of algebraic set theory (AST), which axiomatises the category of classes. This is a structural analogue of class-set theory. There is no guarantee this will make things easier, but since elementary embeddings preserve all of first-order logic, and topos theory deals mainly with bounded quantifiers, it seems something is necessary beyond just the category of sets. Work of Mike Shulman on *stack semantics* is also relevant here, as it is a means to capture unbounded quantifiers in structural set theory without looking at AST.

Hope this helps, and I’ve love to hear from you if you have any good ideas (see my website for email).

]]>And that’s where you lost me. Isn’t the following function injective:

data A = A | B

data B = C | D

f (A, True) = (C,True)

f (A, False) = (C, False)

f (B, True) = (D, True)

f (B, False) = (D, False)

?

I guess that the fact that A and B are abstract somehow comes into play here. Or is it the bottoms?

]]>