I was reading Eric Schechter’s *Handbook of Analysis and its Foundations* when I had a small epiphany about (of all things) the relationship between model theory and category theory. In contrast to universal algebra, the concept of homomorphism is not very important in model theory. A model is a very rigid object. From the point of view of algebra, a free group (for example) is a very flexible object with many homomorphic images. From the point of view of model theory, the free group comes bundled with every theorem that it satisfies, and that includes the statements that every element is different from the identity. The only map that preserves these statements is an embedding into a larger group. The problem is that for every model, every possible statement is either true or false (this means the set of theorems about the free group, or any model, is a complete theory).

What we want to get the analogue of a homomorphic image is to somehow forget those inequality statements. In model theory terms, we want to work with an incomplete theory rather than a complete theory. This is easy to do, and in fact, many naturally-arising theories are incomplete, but this does not guarantee a rich supply of homomorphisms. If a theory is equationally presented (all of its axioms can be put in the form of equalities) such as that of groups or rings, then homomorphisms are easy to come by. But in general, the only types of homomorphisms that exist are embeddings. The theory of fields is typical.

There is a more indirect way to create incomplete theories: boolean-valued models. To force statements to be neither definitely true nor definitely false, we assign intermediate truth values in a Boolean algebra with more than two elements. Despite their exotic logic, these are easy to construct. For example, the set of functions from a set *I* into a field *F* is not itself a field, but it forms a boolean-valued model. The truth value of a logical statement becomes the set of elements of *I* for which the statement holds. A statement is true if it holds for all of *I* and false if it holds for none of *I*. Boolean-valued models have lots of homomorphisms.

Several standard constructions can be interpreted in terms of boolean-valued models. The ultraproduct, which creates models in the ordinary sense, not boolean-valued models, works by creating a boolean-valued model and then taking a maximal quotient. (Nonstandard analysis can constructed using an ultraproduct.) Set-theoretic forcing can also be interpreted in terms of boolean-valued models. In turn, boolean-valued models can considered as a special case of sheaf semantics.