If A and B are types, then so is their product, written
. There will be many formation rules of this form, so we
adopt a simple convention for stating them. We write

The elements of a product are pairs, <a, b>. Specifically if a
belongs to A and b belongs to B, then <a, b> belongs to
. We abbreviate this by writing
![]()
In programming languages these types are generalized to n-ary
products, say
and called
structures or records.
We say that <a,b> = <c,d> in
iff a=c in A and b=d in B.
In set theory, equality is uniform, but in type theory we define equality with each constructor.
There is essentially only one way to
decompose pairs. We say things like, ``take the first element of the
pair P,'' symbolically we might say first(P) or
. We
can also ``take the second element of P,'' second(P) or
.