Système F

De testwiki
Aller à la navigation Aller à la recherche

Modèle:Voir homonymes Le Modèle:Nobr est un formalisme logique qui permet d'exprimer de façon très riche et très rigoureuse des fonctions et d'y démontrer formellement des propriétés difficiles. Plus précisément, le Modèle:Nobr (é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'existence d'une quantification universelle sur les types qui permet d'exprimer du polymorphisme.

Le Modèle:Nobr possède deux propriétés cruciales :

  1. la réduction des termes est fortement normalisante (dit plus crûment : tous les calculs se terminent) ;
  2. il correspond par la correspondance de Curry-Howard à la logique minimale propositionnelle du second ordre. Soit : le calcul propositionnel, sans la négation mais avec les quantificateurs.

Note liminaire : La lecture de cet article suppose la lecture préalable de l'article « lambda-calcul » et son assimilation.

Introduction

Ainsi que l'atteste sa double origine, le Modèle:Nobr peut être étudié dans deux contextes très différents :

  • Dans le domaine de la programmation fonctionnelle, où il apparaît comme une extension très expressive du noyau du langage ML. Son expressivité est illustrée par le fait que les types de données courants (booléens, entiers, listes, etc.) sont définissables dans le Modèle:Nobr à partir des constructions de base ;
  • Dans le domaine de la logique, et plus particulièrement de la théorie de la démonstration. À travers la correspondance de Curry-Howard, le Modèle:Nobr est en effet isomorphe à la logique minimale du second ordre. En outre, ce système capture très exactement la classe des fonctions numériques dont l'existence est prouvable en arithmétique intuitionniste du second ordre (parfois appelée analyse intuitionniste). C'est d'ailleurs cette propriété remarquable du Modèle:Nobr qui a historiquement motivé son introduction par Jean-Yves Girard, dans la mesure où cette propriété permet de résoudre le problème de l'élimination des coupures en arithmétique du second ordre, conjecturé par Takeuti.

Historiquement le Modèle:Nobr a joué un rôle essentiel dans les fondations de l'informatique en proposant, dès le début des années 1970, un formalisme de types riche, simple et très expressif de fonctions calculables très générales. Il ouvrait la voie aux langages de programmation typés modernes et aux assistants de preuve comme Rocq.

Comme le lambda-calcul simplement typé, le Modèle:Nobr admet deux présentations équivalentes :

  • Une présentation à la Church, dans laquelle chaque terme contient toutes les annotations de type nécessaires à la reconstruction de son type (de manière univoque) ;
  • Une présentation à la Curry, due à l'informaticien Daniel Leivant, dans laquelle les termes (qui sont ceux du lambda-calcul pur) sont dépourvus de toute annotation de type, et sont ainsi sujets aux problèmes d'ambiguïté typique.

Présentation à la Church

Le Modèle:Nobr admet deux sortes d'objets: les types et les termes. Les termes peuvent être « réduits » et traduisent des fonctions calculables, tandis que les types annotent les termes et permettent de les catégoriser.

La syntaxe

Les types du Modèle:Nobr (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 :

  • (Variable de type) Si α est une variable de type, alors α est un type ;
  • (Type flèche) Si A et B sont des types, alors AB est un type ;
  • (Type universel) Si α est une variable de type et B un type, alors αB est un type.

En résumé, les types du Modèle:Nobr sont donnés par la grammaire BNF :

A,B::=α|AB|αB.

Comme en lambda-calcul ou en calcul des prédicats, la présence d'un symbole mutificateur nécessite de distinguer les notions de variable libre et de variable liée, et d'introduire les mécanismes usuels de renommage permettant de travailler à α-conversion près. Enfin, l'algèbre de types du Modèle:Nobr est munie d'une opération de substitution similaire à celle du lambda-calcul, et l'on note B{α:=A} le type obtenu en remplaçant dans le type B toutes les occurrences libres de la variable de type α par le type A.

Les termes (bruts) du Modèle:Nobr (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 :

  • (Variable) Si x est une variable de terme, alors x est un terme ;
  • (Abstraction) Si x est une variable de terme, A un type et M un terme, alors λx:A.M est un terme ;
  • (Application) Si M et N sont des termes, alors MN est un terme ;
  • (Abstraction de type) Si α est une variable de type et M un terme, alors Λα.M est un terme ;
  • (Application de type) Si M est un terme et A un type, alors MA est un terme.

En résumé, les termes (bruts) du Modèle:Nobr sont donnés par la grammaire BNF :

M,N::=x|λx:A.M|MN|Λα.M|MA.

Les termes du Modèle:Nobr incorporent deux mécanismes de liaison de variable : un mécanisme de liaison de variables de termes (par la construction λx:A.M) et un mécanisme de liaison de variables de types (par la construction Λα.M), qui sont tous les deux pris en compte au niveau de la relation d'α-conversion. Ce double mécanisme donne naturellement lieu à deux opérations de substitution : une substitution de terme notée M{x:=N}, et une substitution de type notée M{α:=A}.

La β-réduction

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 Modèle:Nobr :

  • (λx:A.M)NM{x:=N} ;
  • (Λα.M)AM{α:=A}.

Comme pour le lambda-calcul pur, la β-réduction du Modèle:Nobr est confluente (sur les termes bruts) et vérifie la propriété de Church-Rosser :

  • (Confluence de la β-réduction) Si M*M1 et M*M2, alors il existe un terme M tel que M1*M et M2*M ;
  • (Propriété de Church-Rosser) Pour que deux termes M1 et M2 soient β-convertibles, il faut et il suffit qu'il existe un terme M tel que M1*M et M2*M.

Le système de types

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 Modèle:Nobr est construit autour d'un jugement de typage de la forme ΓM:A (« dans le contexte Γ, le terme M a pour type A »), qui est défini à partir des règles d'inférence suivantes :

  • (Axiome) Γx:A si (x:A)Γ ;
  • (-intro) Γ,x:AM:BΓλx:A.M:AB ;
  • (-élim) ΓM:ABΓN:AΓMN:B ;
  • (-intro) ΓM:BΓΛα.M:αB si α n'a pas d'occurrence libre dans Γ ;
  • (-élim) ΓM:αBΓMA:B{α:=A}.

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 :

  • (Préservation du type par réduction) Si ΓM:A et si M*M, alors ΓM:A ;
  • (Normalisation forte) Si ΓM:A, alors M est fortement normalisable.

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 Modèle:Nobr 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é.

Indécidabilité

Modèle:Source de la section Le système de type présenté dans la section précédente est explicite, ce qui veut dire de les informations sur le type des termes sont données à chaque étape. On dit aussi que c'est un système Modèle:Citation. Dans un tel système, vérifier qu'un terme est bien typé est très simple.

En 1994, Joe B. Wells a résolu une conjecture ancienne, qui répond à un problème plus général, à savoir que la vérification de type pour un variant Modèle:Citation du Modèle:Nobr (un système de type où les informations de type ne sont pas données) est indécidable[1]. Le résultat de Wells signifie que la reconstruction du type pour le Modèle:Nobr n'est pas possible. Autrement dit, en Modèle:Nobr, on ne peut pas avoir un mécanisme logiciel qui, comme en OCaml ou en Haskell, assigne un type à une fonction que le programmeur a entrée. Cependant dans ces langages, pour aller vers des systèmes de type qui englobent le Modèle:Nobr, le programmeur doit fournir, ici ou là, des informations de type pour aider le logiciel à reconstruire le type du terme entier. Dans des langages comme Gallina (de Rocq) ou Modèle:Lien qui contiennent une large extension du Modèle:Nobr, la contribution du programmeur au typage est déterminante.

Représentation des types de données

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 Modèle:Nobr, 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.

Booléens et types finis

Le type des booléens est défini dans le Modèle:Nobr par

  • Boolγ(γγγ)

et les constantes true et false par :

  • trueΛγ.λx,y:γ.x:Bool ;
  • falseΛγ.λx,y:γ.y:Bool.

On peut démontrer que les deux termes ci-dessus sont les deux seuls termes clos en forme normale de type Bool. Ainsi, le type de données Bool capture effectivement la notion de booléen.

La construction 'if … then … else …' est définie par

  • ifCMthenN1elseN2MCN1N2

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ù :

  • Dans tout contexte où le terme M a le type Bool et où les termes N1 et N2 ont le type C, la construction ifCMthenN1elseN2 est bien typée et a pour type le type C ;
  • Si le terme M se réduit sur true, alors la construction ifCMthenN1elseN2 se réduit sur N1 ;
  • Si le terme M se réduit sur false, alors la construction ifCMthenN1elseN2 se réduit sur N2.

Plus généralement, on peut définir un type fini En à n valeurs e1,,en en posant :

  • Enγ(γγnγ) ;
  • eiΛγ.λx1,,xn:γ.xi (pour tout 1in).

Là encore, on peut démontrer que les termes e1,,en sont les seuls termes clos en forme normale de type En. L'opération de filtrage correspondant est définie par :

  • matchCMwithe1N1||enNnMCN1Nn

(où C désigne le type des branches de filtrage).

En particulier :

  • E2γ(γγγ)Bool (type des booléens) ;
  • E1γ(γγ)Unit (type singleton) ;
  • E0γγEmpty (type vide).

Le type E0 n'est habité par aucun terme clos en forme normale, et, d'après le théorème de normalisation forte, il n'est habité par aucun terme clos.

Produit cartésien et somme directe

Soit A et B deux types. Le produit cartésien A×B est défini dans le Modèle:Nobr par

  • A×Bγ((ABγ)γ)

et la construction de couple par

  • M;NΛγ.λf:(ABγ).fMN:A×B (si M:A et N:B)

Comme pour les types énumérés, on peut démontrer que les seuls termes clos en forme normale de type A×B sont de la forme M;N, où M et N sont des termes clos en forme normale de type A et B, respectivement. Les fonctions de projection correspondantes sont données par

  • fstΛα,β.λp:(α×β).pα(λx:α.λy:β.x):α,β(α×βα)
  • sndΛα,β.λp:(α×β).pβ(λx:α.λy:β.y):α,β(α×ββ)

Ces fonctions vérifient naturellement les égalités fstABM;N=M et sndABM;N=N.

La somme directe A+B est définie par

  • A+Bγ((Aγ)(Bγ)γ)

Les habitants des types A et B sont plongés dans le type A+B à l'aide des constructions

  • inl(M)Λγ.λf:(Aγ).λg:(Bγ).fM:A+B (si M:A)
  • inr(M)Λγ.λf:(Aγ).λg:(Bγ).gM:A+B (si M:B)

tandis que le filtrage des éléments de type A+B est assuré par la construction

  • matchNwithinl(x)M1|inr(y)M2NC(λx:A.M1)(λy:B.M2)

qui satisfait les égalités définitionnelles attendues.

Contrairement au produit cartésien, l'encodage de la somme directe dans le Modèle:Nobr 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 inl(M) (avec M:A) ni de la forme inr(M) (avec M:B)Modèle:Référence nécessaire.

Les entiers de Church

Le type des entiers de Church est défini dans le Modèle:Nobr par

  • 𝐍𝐚𝐭γ(γ(γγ)γ)

Chaque entier naturel n est représenté par le terme

  • n¯Λγλx:γ.λf:(γγ).f((fnx)):𝐍𝐚𝐭

Comme pour les booléens, le type 𝐍𝐚𝐭 capture la notion d'entier naturel puisque tout terme clos de type 𝐍𝐚𝐭 en forme normale est de la forme n¯ pour un certain entier naturel n.

Présentation à la Curry

La fonction d'effacement

  • |x|=x
  • |λx:A.M|=λx.|M|
  • |MN|=|M||N|
  • |Λα.M|=|M|
  • |MA|=|M|

Le système de types

  • (Axiome) Γx:A si (x:A)Γ
  • (-intro) Γ,x:AM:BΓλx.M:AB
  • (-élim) ΓM:ABΓN:AΓMN:B
  • (-intro) ΓM:BΓM:αB si α n'a pas d'occurrence libre dans Γ
  • (-élim) ΓM:αBΓM:B{α:=A}.

Équivalence entre les deux systèmes

Le théorème de normalisation forte

Les termes typables du Modèle:Nobr sont fortement normalisables, autrement dit la réduction des termes est une opération qui se termine toujours en produisant une forme normale.

Candidats de réductibilité

Modèle:Source de la section

La méthode des candidats de réductibilité a été développée par Jean-Yves Girard en généralisant la preuve de Modèle:Lien[2] pour prouver la forte normalisation du système T pour montrer la forte normalisation du système F, plus particulièrement, sa terminaison. En effet, une simple récurrence sur la taille du type ou du terme n'est pas suffisante, pour deux raisons. Premièrement, si λx.M et N sont fortement normalisables, ce n'est pas nécessairement le cas de (λx.M)N. Ce problème était déjà résolu par la méthode de Tait. Deuxièmement, pour montrer que Λα.M:α.T est fortement normalisable, il faut montrer que pour tout type U, M{α:=U}:T{α:=U} est fortement normalisable, or T{α:=U} n'est pas nécessairement un type plus petit que α.T, ce qu'on peut constater en choisissant T=αα, U=α.T, on a alors T{α:=U}=(α.T)(α.T). C'est ce problème en particulier que Girard a résolu.

Un candidat de réductibilité C de type T est un ensemble de termes de type A qui vérifie un certain nombre de propriétés :

  • tous les termes d'un candidat sont fortement normalisables,
  • un candidat est stable par réduction,
  • si t est un terme neutre et que tous les réduits de t sont dans C, alors tC. Un terme neutre est une variable, appliquée à une liste potentiellement vide de types et de termes en forme normale.

En particulier, l'ensemble SNA des termes fortement normalisables de type A est un candidat de réductibilité de type A.

Soit A un type dont les variables libres sont incluses dans α1,,αn et R1,,Rn des candidats de réductibilité de type α1,,αn respectivement. On définit par induction sur A l'ensemble REDA(Ri)i, qui est un candidat de réductibilité de type A :

  • Si A est la variable Xi, REDA(Ri)i=Ri.
  • Si A=TU, REDA(Ri)i={MNREDT(Ri)i,MNREDU(Ri)i}.
  • Si A=α.T, REDA(Ri)i=UtypeR𝒞UREDT{α:=U}R1,,Rn,R, où 𝒞U désigne l'ensemble des candidats de réductibilité de type U.

Ensuite, on montre, par induction sur la dérivation, que si ΓM:A, MREDASNα1,,SNαn. On peut en déduire que si M est typable alors M est fortement normalisable.

Les candidats de réductibilité connaissent plusieurs variantes[3], par exemple les candidats peuvent être non-typés, et cette technique a été largement déclinée pour divers systèmes de types, présentant des caractéristiques variées : intersections de types[4], types récursifs[5], types modaux[6], types dépendants[7].

Correspondance avec la logique du second ordre

À travers la correspondance de Curry-Howard, le Modèle:Nobr correspond très exactement à la logique minimale du second ordre, dont les formules sont construites à partir des variables propositionnelles à l'aide de l'implication et de la quantification propositionnelle :

A,B:=α|AB|αB

Rappelons que dans ce cadre, les unités (vérité) et (absurdité), les connecteurs ¬ (négation), (conjonction) et (disjonction) et la quantification existentielle αB(α) sont définissables par

  • γ(γγ)
  • γγ
  • ¬AA
  • ABγ((ABγ)γ)
  • ABγ((Aγ)(Bγ)γ)
  • αB(α)γ(α(B(α)γ)γ)

(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 Modèle:Nobr est habité par un terme clos.

Correspondance avec l'arithmétique du second ordre

Modèle:...

Bibliographie

Notes et références

Modèle:Références

Modèle:Portail