natural deduction metalanguage, practical foundations
type theory (dependent, intensional, observational type theory, homotopy type theory)
computational trinitarianism = propositions as types +programs as proofs +relation type theory/category theory
The principle of functional extensionality states that two functions are equal if their values are equal at every argument.
In intensional (Martin-Löf) dependent type theory the existence of identity types induces a notion on paths between terms of a given type.
In particular for two terms
f g: X -> Y
of function type, a path/morphism
p: f == g
between them is to be thought of as a homotopy or natural transformation (a -transfor). In particular it implies, one can prove, that there are families of paths between all the values of the functions
happly f g p: forall x: X, f x == g x .
However, from general intensional dependent type theory one cannot prove the converse:
From a purely intensional point of view, this is to be expected — two functions could be defined in different ways, and thus be intensionally different, yet produce the same values on all inputs (i.e. be extensionally the same).
However, in many contexts one wants to treat functions extensionally, such as when regarding type theory as the internal language of some category. In particular, this is the case in homotopy type theory, where one wants to interpret the type theory as the internal language of an (∞,1)-topos, for instance of Top ∞Grpd.
In such an internal logic context, a family of anything must always mean “continuous family”, so that a family of paths between the values of two functions is a continuous homotopy between them, and hence ought to induce a path between them in the function-space. Thus, one wants to impose the condition that from a term
eta: forall x: X, f x == g x .
we can deduce an actual path between and .
Translating this into direct categorical terms, the term gives a map
into the dependent product, which (as discussed there), in turn corresponds to a section of the display map on the left side of the pullback
where is the identity type or space of paths in . Such a section is tantamount to a lift of . From this we would like to deduce an actual path .
So, very simply, function extensionality means we are able to lift elements through a canonical map that is obtained from a dependent eliminator?.
Of course we are not just interested in global elements here. What we really want is an actual section of in the slice over (although this can be derived from the global element formulation by using the Yoneda lemma together with currying and uncurrying tricks). This condition may be called “naive” or “weak” function extensionality, in view of an apparently stronger condition that this section (and therefore also ) be equivalences. This latter condition might be called “strong function extensionality”.
Under reasonable assumptions on the type theory, it turns out that these and other versions of function extensionality are equivalent; for now see (Lumsdaine) below. In any case, if the type theory has an extra axiom that implies some such version, one says that function extensionality holds.
An interval type in homotopy type theory (with definitional computation rule for the endpoints) implies function extensionality; see this blog post
The univalence axiom implies function extensionality (this is due to Vladimir Voevodsky). See for instance (Bauer-Lumsdaine).
An introduction to the relevant notions and a guided walk through the formal proof that univalence implies functional extensionality is at
A discussion of various flavors of function extensionality, and how to move between them, can be found in
Richard Garner, On the strength of dependent products in the type theory of Martin-Löf
Peter LeFanu Lumsdaine, Strong functional extensionality from weak (HoTT blog post)
Coq code in the HoTT repository and Peter Lumsdaine’s fork