  We provide a sound and complete proof system for an extension of Kleene's
ternary logic to predicates. The concept of theory is extended with, for each
function symbol, a formula that specifies when the function is defined. The
notion of "is defined" is extended to terms and formulas via a straightforward
recursive algorithm. The "is defined" formulas are constructed so that they
themselves are always defined. The completeness proof relies on the Henkin
construction. For each formula, precisely one of the formula, its negation, and
the negation of its "is defined" formula is true on the constructed model. Many
other ternary logics in the literature can be reduced to ours. Partial
functions are ubiquitous in computer science and even in (in)equation solving
at schools. Our work was motivated by an attempt to explain, precisely in terms
of logic, typical informal methods of reasoning in such applications.
