|logic||category theory||type theory|
|true||terminal object/(-2)-truncated object||h-level 0-type/unit type|
|false||initial object||empty type|
|proposition||(-1)-truncated object||h-level 1-type/h-prop|
|cut elimination for implication||counit for hom-tensor adjunction||beta reduction|
|introduction rule for implication||unit for hom-tensor adjunction||eta conversion|
|disjunction||coproduct ((-1)-truncation of)||sum type (bracket type of)|
|implication||internal hom||function type|
|negation||internal hom into initial object||function type into empty type|
|universal quantification||dependent product||dependent product type|
|existential quantification||dependent sum ((-1)-truncation of)||dependent sum type (bracket type of)|
|equivalence||path space object||identity type|
|equivalence class||quotient||quotient type|
|induction||colimit||inductive type, W-type, M-type|
|higher induction||higher colimit||higher inductive type|
|completely presented set||discrete object/0-truncated object||h-level 2-type/preset/h-set|
|set||internal 0-groupoid||Bishop set/setoid|
|universe||object classifier||type of types|
|modality||closure operator monad||modal type theory, monad (in computer science)|
|linear logic||(symmetric, closed) monoidal category||linear type theory/quantum computation|
|proof net||string diagram||quantum circuit|
|(absence of) contraction rule||(absence of) diagonal||no-cloning theorem|
In logic, a proposition is intended to be interpreted semantically as having a truth value. In modern logic, it’s cleanest to start by specifying a context and considering the propositions in that context.
If (in a given context ) we have a type , then we may extend to a context (assuming that the variable is not otherwise in use). We may then think of any proposition in as a predicate in with the free variable of type ; this generalises to more complicated extensions of contexts (say by several variables).
If is a predicate with free variable of type and is a term of type , then we get a proposition by substituting for every instance of in . Conversely, any proposition may be interpreted as a predicate in which the free variable simply doesn’t appear. (We have for every term .)
There is a more traditional approach of viewing a predicate as a function from terms to propositions, a propositional function. Then is written , while itself from above is written (since a variable is a term). In this approach, less care is usually taken with the context, so that may be conflated with (since , or this would be so if were a term in instead of only in ).
In categorial logic/categorical semantics, we have a category and a class of monomorphisms? (often all monomorphisms) in . Then a context is an object of and a proposition in the context is an -subobject of . We also have a class of display maps (often all morphisms in ) such that is closed under pullbacks both along display maps and along sections of display maps. These two ways of pulling back propositions in one context to propositions in another context correspond (respectively) to forming and .
More specifically, if is a finitely complete category, then the objects of may equivalently be viewed as contexts and as types in the internal language of ; a morphism from to is a term of type in context . The extension of by a variable of type is the product , and the display map to is simply the projection. Every term defines a section of this display map, and we may literally construct and as pullbacks.
If is even a topos, then a proposition in may be identified with a term whose type is the subobject classifier , and the predicate is the composite . Given a term and a predicate , the proposition is the composite . Internalising a bit (by currying), we may view as a global element and as a morphism , recovering the view that predicates are proposition-valued ‘functions’ (morphisms).
In general, we may intuitively think of an object in the slice category as the ‘set’ (object) of possible values of terms of type in context , and think of a predicate with a free variable of type (in the same context) as being the ‘subset’ (subobject) on those for which the statement is true.
In propositional logic, we fix a single context (considered the empty context?) and consider the logic of propositions in that context. In predicate logic, we fix the empty context but work also in extensions of that context by free variables. Predicate logic uses quantifiers as a way to move between contexts, more specifically to move from a predicate in a given context (which is a proposition in some extension of ) to a proposition in . The free variables in the predicate still appear in the written form of the proposition, but they are now bound variables and are not free in the proposition's context; some logicians prefer to systematically replace bound variables with numbered placeholders (especially when defining Gödel number?s and the like).