Le système F (également connu sous le nom de lambda-calcul polymorphe ou de lambda-calcul du second ordre) est une extension du lambda-calcul simplement typé introduite indépendamment par le logicien Jean-Yves Girard et par l'informaticien John C. Reynolds. Ce système se distingue du lambda-calcul simplement typé par l'introduction d'un mécanisme de quantification universelle de type qui permet d'exprimer le polymorphisme paramétrique.
Ainsi que l'atteste sa double origine, le système F peut être étudié dans deux contextes très différents:
Comme le lambda-calcul simplement typé, le système F admet deux présentations équivalentes:
Les types du système F (notés A, B, C, etc.) sont formés à partir d'un ensemble de variables de types (notées α, β, γ, etc.) à l'aide des trois règles de construction suivantes:
En résumé, les types du système F sont donnés par la grammaire BNF:
Comme en lambda-calcul ou en calcul des prédicats, la présence d'un symbole mutificateur
Les termes (bruts) du système F (notés M, N, etc.) sont formés à partir d'un ensemble de variables de termes (notées x, y, z, etc.) à l'aide des cinq règles de construction suivantes:
En résumé, les termes (bruts) du système F sont donnés par la grammaire BNF:
On notera que les termes du système F incorporent deux mécanismes de liaison de variable: un mécanisme de liaison de variables de termes (par la construction
La présence d'un double mécanisme d'abstraction et d'application (abstraction/application de terme et abstraction/application de type) donne lieu à deux règles de β-réduction, dont l'union engendre par passage au contexte la relation de β-réduction en une étape du système F:
Comme pour le lambda-calcul pur, la β-réduction du système F est confluente (sur les termes bruts) et vérifie la propriété de Church-Rosser:
On appelle contexte de typage (notation: Γ, Γ', etc.) toute liste finie de déclarations de la forme x:A (où x est une variable de terme et A un type) dans laquelle une variable de terme est déclarée au plus une fois.
Le système de types du système F est construit autour d'un jugement de typage de la forme
Les deux propriétés principales de ce système de types sont la propriété de préservation du type par β-réduction et la propriété de normalisation forte:
La première de ces deux propriétés est une propriété purement combinatoire qui se démontre par une induction directe sur la dérivation de typage. En revanche, la propriété de normalisation forte du système F est une propriété dont la démonstration repose fondamentalement sur des méthodes non-combinatoires, basées sur la notion de candidat de réductibilité.
Pour pouvoir utiliser le lambda-calcul simplement typé comme un langage de programmation, il est nécessaire de lui adjoindre des types de base (booléens, entiers, etc.) et des règles de réduction supplémentaires qui étendent le pouvoir expressif du formalisme. Un exemple d'une telle extension est le système T de Gödel, qui est obtenu en ajoutant au lambda-calcul simplement typé des entiers naturels primitifs et un mécanisme de récursion similaire à la récursion primitive (mais plus expressif).
Dans le système F, une telle extension n'est pas nécessaire car l'expressivité du formalisme permet de définir les types de base et les constructeurs de types usuels sans qu'il soit nécessaire de modifier ni le système de types ni les règles de réduction.
Le type des booléens est défini dans le système F par
et les constantes
On peut démontrer que les deux termes ci-dessus sont les deux seuls termes clos en forme normale de type . Ainsi, le type de données capture effectivement la notion de booléen.
La construction 'if ... then ... else ...' est définie par
où C désigne le type d'élimination de la construction 'if ...', c'est-à-dire le type commun aux deux branches de la conditionnelle. Cette définition est correcte du point de vue du typage comme du point de vue calculatoire dans la mesure où:
Plus généralement, on peut définir un type fini En à n valeurs
Là encore, on peut démontrer que les termes
(où C désigne le type des branches de filtrage).
En particulier:
On notera que le type E0 n'est habité par aucun terme clos en forme normale, et, d'après le théorème de normalisation forte, qu'il n'est habité par aucun terme clos.
Soit A et B deux types. Le produit cartésien
et la construction de couple par
Comme pour les types énumérés, on peut démontrer que les seuls termes clos en forme normale de type
Ces fonctions vérifient naturellement les égalités
La somme directe A + B est définie par
Les habitants des types A et B sont plongés dans le type A + B à l'aide des constructions
tandis que le filtrage des éléments de type A + B est assuré par la construction
qui satisfait les égalités définitionnelles attendues.
Contrairement au produit cartésien, l'encodage de la somme directe dans le système F ne capture pas toujours la notion d'union disjointe, dans la mesure où il est possible, dans certains cas, de construire des termes clos en forme normale de type A + B qui ne sont ni de la forme
Le type des entiers de Church est défini dans le système F par
Chaque entier naturel n est représenté par le terme
Comme pour les booléens, le type
Les termes typables du système F sont fortement normalisables.
À travers la correspondance de Curry-Howard, le système F correspond très exactement à la logique minimale intuitionniste du second ordre, dont les formules sont construites à partir des variables propositionnelles à l'aide de l'implication et de la quantification propositionnelle:
Rappelons que dans ce cadre, les unités
(On notera qu'à travers la correspondance de Curry-Howard, l'absurdité correspond au type vide, la vérité au type singleton, la conjonction au produit cartésien et la disjonction à la somme directe.)
On démontre que dans ce formalisme, une formule est prouvable sans hypothèses si et seulement si le type correspondant dans le système F est habité par un terme clos.