Théorie des types

théorie mathématique From Wikipedia, the free encyclopedia

En mathématiques, logique et informatique, une théorie des types est une classe de systèmes formels, dont certains peuvent servir d'alternatives à la théorie des ensembles comme fondation des mathématiques. Ils ont été historiquement introduits pour résoudre le paradoxe d'un axiome de compréhension non restreint.

Représentation schématique de la transmission des méthodes d'une classe abstraite à une classe dérivée.

En théorie des types, il existe des types de base et des constructeurs (comme celui des fonctions ou encore celui du produit cartésien) qui permettent de créer de nouveaux types à partir de types préexistant. Une différence notable avec la théorie des ensembles est que chaque terme possède un type, ce qui est un jugement subjectif et non pas une proposition[note 1]. En d'autres termes la question de savoir si un terme appartient ou non à un type n'est pas réputée objective.

Des types sont utilisés dans certains langages de programmation, ce qui permet d'éviter des bugs.

Toutefois, la théorie des types fait plus souvent références à l'étude des systèmes de types qui servent de fondation alternative aux mathématiques. Le λ-calcul typé d'Alonzo Church et ses extensions permettent de faire de la logique à différents ordres ; ainsi elles servent à formaliser le système F. Dans la même ligne, la théorie des types intuitionniste de Per Martin-Löf ainsi que le calcul des constructions inductif offrent d'autres perspectives. Ceux-ci sont notamment à la base d'Agda (en) ou de Rocq qui sont des assistants de preuve.

Histoire

D'un point de vue de la théorie mathématique : les types ont été pour la première fois théorisés par Bertrand Russell comme réponse à sa découverte du paradoxe ébranlant la théorie naïve des ensembles de Gottlob Frege. Cette théorie des types est développée dans l'ouvrage Principia Mathematica de Russell et Whitehead. Elle permet de contourner le paradoxe de Russell en introduisant tout d'abord une hiérarchie de types, puis en assignant un type à chaque entité mathématique. Les objets d'un certain type ne peuvent être construits qu'à partir d'objets leur préexistant (situés plus bas dans la hiérarchie), empêchant ainsi les boucles infinies et les paradoxes de surgir et de casser la théorie.

Pour ce qui concerne le sous-domaine des mathématiques nommé la logique mathématique  mais c'est aussi très utile dans le domaine de l'informatique, dans des sous-domaines nommés théorie des grammaires, théorie de la compilation, et système de réécriture, voire plus récemment dans le domaine de la transcompilation  on utilise les types dans le cadre de la théorie des types.

Dans le langage courant, « théorie des types » est à comprendre dans le contexte des systèmes de réécriture. L'exemple le plus connu est le lambda calcul d'Alonzo Church. Sa Theory of Types[1] a permis de passer du calcul non-typé originel, incohérent du fait du paradoxe de Kleene-Rosser (en), à un calcul correct. Church a démontré que ce système pouvait servir de fondement des mathématiques ; on le décrit comme une logique d'ordre supérieur.

D'autres théories des types marquantes sont la théorie des types intuitionniste de Per Martin-Löf qui est utilisée comme fondement dans certaines branches des mathématiques constructivistes et pour des assistants de preuve tels que Agda (en) ou Idris[2]. Le calcul des constructions de Thierry Coquand et ses extensions sont utilisés notamment par Rocq et Matita (en). Il s'agit d'une recherche active, comme le démontrent les récents développements en théorie homotopique des types[3].

Une première théorie des types (dite « ramifiée ») a été créée par Bertrand Russell pour résoudre les paradoxes logiques, comme celui du menteur et ceux de la théorie des ensembles ; lourde d'emploi, elle a d'abord été simplifiée par Ramsey puis supplantée par la théorie de Zermelo-Frankel en 1922 (socle axiomatique utilisé par tous les mathématiciens, l'autre théorie NF conçue par Quine en 1937 et perfectionnée en NFU en 1969 par Ronald Jensen n'étant pas utilisée par les mathématiciens malgré les possibilités simplificatrices qu'elle offre, voir New Foundations[note 2]), et aussi reconsidérée pour des objets plus élémentaires après la découverte du lambda-calcul et de la logique combinatoire. Bien que ces théories soient cohérentes dans leurs versions originelles, qui sont non typées, il est intéressant d'en étudier des formulations avec types.

Dans ces derniers cas, les entités mathématiques sont construites à l'aide de fonctions, où chaque fonction a un type qui décrit le type de ses arguments et le type de la valeur retournée. Les entités sont bien formées lorsque les fonctions sont appliquées à des entités ayant le type que la fonction attend.

Applications

Fondements mathématiques

Le premier assistant de preuve informatique, appelé Automath, utilisait la théorie des types pour encoder les mathématiques dans un ordinateur. Martin-Löf a développé spécifiquement la théorie intuitionniste des types afin d'encoder l'ensemble des mathématiques et d'en faire un nouveau fondement pour la discipline. Des recherches sont encore en cours concernant les fondements mathématiques basés sur la théorie homotopique des types.

Les mathématiciens travaillant en théorie des catégories éprouvaient déjà des difficultés à utiliser le fondement largement accepté de la théorie des ensembles de Zermelo–Fraenkel. Cela a conduit à des propositions telles que la théorie élémentaire de la catégorie des ensembles (ETCS) de Lawvere. La théorie homotopique des types s’inscrit dans cette continuité en s'appuyant sur la théorie des types. Les chercheurs explorent les liens entre les types dépendants (en particulier le type identité) et la topologie algébrique (notamment l’homotopie).

Assistants de preuve

Article principal : Assistant de preuve

Une grande partie de la recherche actuelle sur la théorie des types est motivée par les assistants de preuve interactifs et les démonstrateurs automatiques de théorèmes. La plupart de ces systèmes utilisent une théorie des types comme fondement mathématique pour représenter les preuves, ce qui n’a rien de surprenant compte tenu du lien étroit entre la théorie des types et les langages de programmation :

  • LF est utilisé par Twelf, souvent pour définir d’autres théories des types ;
  • de nombreuses théories des types relevant de la logique d'ordre supérieur sont utilisées par la famille de démonstrateurs HOL ainsi que par PVS ;
  • la théorie computationnelle des types est utilisée par NuPRL ;
  • le calcul des constructions et ses dérivés sont utilisés par Rocq (anciennement connu sous le nom Coq), Matita, et Lean ;
  • UTT (Unified Theory of dependent Types de Luo) est utilisé par Agda, qui est à la fois un langage de programmation et un assistant de preuve.

De nombreuses théories des types sont prises en charge par LEGO et Isabelle. Isabelle prend également en charge d’autres fondements que les théories des types, tels que ZFC. Mizar est un exemple de système de preuve qui repose uniquement sur la théorie des ensembles.

Langages de programmation

Toute analyse statique de programmes, comme les algorithmes de vérification de types utilisés lors de l’analyse sémantique d’un compilateur, entretient un lien avec la théorie des types. Un exemple emblématique est Agda, un langage de programmation qui utilise UTT (Unified Theory of dependent Types de Luo) pour son système de types.

Le langage de programmation ML a été développé pour manipuler des théories des types (voir LCF) et son propre système de types en a été fortement influencé.

Linguistique

La théorie des types est également largement utilisée en sémantique formelle des langages naturels, en particulier dans la grammaire de Montague et ses prolongements. Les grammaires catégorielles et les grammaires de prégroupe utilisent notamment de manière extensive des constructeurs de types pour définir les types grammaticaux (nom, verbe, etc.) des mots.

La construction la plus courante considère les types de base (pour les individus) et (pour les valeurs de vérité), et définit l’ensemble des types de manière récursive comme suit :

  • si et sont des types, alors en est également un ;
  • rien n’est un type en dehors des types de base et de ce qui peut être construit à partir d’eux selon la règle précédente.

Un type complexe est le type des fonctions qui associent à des entités de type des entités de type . On obtient ainsi des types tels que , interprétés comme des éléments de l’ensemble des fonctions des entités vers les valeurs de vérité, c’est-à-dire des fonctions indicatrices d’ensembles d’entités.

Une expression de type est une fonction d’ensembles d’entités vers des valeurs de vérité, c’est-à-dire une fonction indicatrice d’un ensemble d’ensembles. Ce dernier type est couramment considéré comme le type des quantificateurs du langage naturel, tels que tout le monde ou personne (Montague 1973 ; Barwise et Cooper 1981).

La théorie des types avec enregistrements (type theory with records) est un cadre de représentation de sémantique formelle qui utilise des enregistrements pour exprimer les types de la théorie des types. Elle a été utilisée en traitement automatique des langues, notamment en sémantique computationnelle et dans les systèmes de dialogue.

Sciences sociales

Gregory Bateson a introduit une théorie des types logiques dans les sciences sociales ; ses notions de double contrainte (double bind) et de niveaux logiques sont fondées sur la théorie des types de Russell.

Logique

Une théorie des types est une logique mathématique, c’est-à-dire un ensemble de règles d’inférence produisant des jugements. La plupart des logiques comportent des jugements affirmant « la proposition est vraie » ou « la formule est bien formée ». Une théorie des types, quant à elle, comporte des jugements qui définissent des types et les attribuent à un ensemble d’objets formels appelés termes. Un terme et son type sont souvent écrits ensemble sous la forme .

Termes

En logique, un terme est défini récursivement comme un symbole constant, une variable, ou une application de fonction, c’est-à-dire un terme appliqué à un autre terme. Les symboles constants peuvent par exemple inclure le nombre naturel , la valeur booléenne ainsi que des fonctions comme la fonction successeur ou l’opérateur conditionnel . Ainsi, certains termes possibles sont et .

Jugements

La plupart des théories des types comportent quatre jugements fondamentaux :

  • «  est un type »
  • «  est un terme de type  »
  • « Le type est égal au type  »
  • « Les termes et , tous deux de type , sont égaux »

Les jugements peuvent découler d’hypothèses. Par exemple, on peut dire « en supposant que est un terme de type et que est un terme de type , il s’ensuit que est un terme de type  ». De tels jugements sont formellement notés à l’aide du symbole taquet .

S’il n’y a aucune hypothèse, rien n’apparaît à gauche du symbole de tournant.

La liste des hypothèses figurant à gauche constitue le contexte du jugement. Les lettres grecques majuscules, telles que et , sont des notations couramment employées pour représenter une partie ou la totalité des hypothèses.

Les quatre types de jugements s’écrivent donc généralement de la manière suivante.

Davantage d’informations , ...
Notation formelle pour

les jugements

Description
est un type (sous les hypothèses )
est un terme de type (sous les hypothèses )
Le type est égal au type (sous les hypothèses )
Les termes et , tous deux de type , sont égaux (sous les hypothèses ).
Fermer

Certains manuels utilisent un triple signe égal afin de souligner qu’il s’agit d’une égalité de jugements et donc d’une notion d’égalité extrinsèque. Les jugements garantissent que chaque terme possède un type. Le type détermine quelles règles peuvent être appliquées à un terme.

Règles d'inférence

Les règles d’inférence d’une théorie des types indiquent quels jugements peuvent être établis à partir de l’existence d’autres jugements. Elles sont exprimées sous forme de déductions à la manière de Gentzen, à l’aide d’une ligne horizontale : les jugements requis figurent au-dessus de la ligne, et le jugement obtenu au-dessous.

Par exemple, la règle suivante exprime une règle de substitution pour l’égalité de jugements :


Ces règles sont syntaxiques et fonctionnent par réécriture. Les métavariables et peuvent en réalité représenter des termes et des types complexes contenant de nombreuses applications de fonctions, et pas seulement des symboles isolés.

Pour produire un jugement particulier dans une théorie des types, il doit exister une règle permettant de le générer, ainsi que des règles produisant chacun des jugements requis par cette première règle, et ainsi de suite. Les règles appliquées forment un arbre de preuve, dont les règles situées tout en haut ne nécessitent aucune hypothèse. Un exemple de règle ne nécessitant aucune entrée est celle qui attribue un type à un terme constant. Ainsi, pour affirmer qu’il existe un terme de type , on écrirait :

Inhabitation des types

De manière générale, la conclusion recherchée d’une démonstration en théorie des types est une inhabitation de type. Le problème de décision de l’inhabitation des types (abrégé par ) est le suivant :

Étant donné un contexte et un type , décider s’il existe un terme auquel on peut attribuer le type dans l’environnement de types .

Le paradoxe de Girard montre que l’inhabitation des types est étroitement liée à la cohérence d’un système de types dans le cadre de la correspondance de Curry–Howard. Pour être cohérent, un tel système doit contenir des types non habités.

Une théorie des types comporte généralement plusieurs règles permettant notamment :

  • de créer un jugement (appelé dans ce cas un contexte) ;
  • d’ajouter une hypothèse au contexte (affaiblissement du contexte) ;
  • de réorganiser les hypothèses ;
  • d’utiliser une hypothèse pour introduire une variable ;
  • de définir la réflexivité, la symétrie et la transitivité de l’égalité de jugements ;
  • de définir la substitution pour l’application des termes lambda ;
  • d’énumérer toutes les interactions liées à l’égalité, telles que la substitution ;
  • de définir une hiérarchie d’univers de types ;
  • d’énoncer l’existence de nouveaux types.

De plus, pour chaque type défini « par règle », il existe quatre sortes de règles :

  1. Règles de formation du type, qui indiquent comment créer le type ;
  2. Règles d’introduction de termes, qui définissent les termes canoniques et les fonctions constructrices (par exemple « pair » ou « S ») ;
  3. Règles d’élimination de termes, qui définissent les autres fonctions, comme « first », « second » ou « R » ;
  4. Règles de calcul, qui spécifient la manière dont les fonctions propres à ce type effectuent une computation.

Pour des exemples détaillés de règles, le lecteur intéressé peut consulter l’Appendice A.2 du livre Homotopy Type Theory ou lire Intuitionistic Type Theory de Martin-Löf.

Liens avec les fondements

Le cadre logique d’une théorie des types présente des similitudes avec la logique intuitionniste, ou logique constructive. Formellement, la théorie des types est souvent décrite comme une mise en œuvre de l’interprétation de Brouwer–Heyting–Kolmogorov de la logique intuitionniste[18]. Par ailleurs, on peut établir des liens avec la théorie des catégories ainsi qu’avec les programmes informatiques.

Logique intuitionniste

Lorsqu’elle est utilisée comme fondement, certaines types sont interprétés comme des propositions (des énoncés pouvant être démontrés), et les termes qui habitent ces types sont interprétés comme des preuves de ces propositions. Lorsque certains types jouent le rôle de propositions, il existe un ensemble de types usuels permettant de les relier entre eux de manière à former une structure analogue à une algèbre booléenne. Toutefois, la logique obtenue n’est pas une logique classique mais une logique intuitionniste : elle ne satisfait ni le principe du tiers exclu, ni la double négation.

Dans cette interprétation intuitionniste, certains types courants jouent le rôle des opérateurs logiques :

Davantage d’informations , ...
Nom logique Notation logique Notation en types Nom du type
Vrai Type unité
Faux Type vide
Implication Fonction
Non Fonction vers le type vide
Et Type produit
Ou Type somme
Pour tout Produit dépendant
Il existe Somme dépendante
Fermer

Comme le principe du tiers exclu ne vaut pas, il n’existe aucun terme du type . De même, la double négation ne vaut pas, de sorte qu’il n’existe aucun terme du type .

Il est possible d’introduire le principe du tiers exclu ou la double négation dans une théorie des types, soit sous forme de règle, soit sous forme d’hypothèse. Toutefois, les termes pourraient alors ne pas se réduire à des termes canoniques, et cela perturberait la capacité à déterminer si deux termes sont égaux au sens de l'égalité de jugements.

Mathématiques constructives

Per Martin-Löf a proposé sa théorie des types intuitionniste comme fondement pour les mathématiques constructives. Les mathématiques constructives exigent que, pour démontrer « il existe un ayant la propriété  », on construise explicitement un certain ainsi qu’une preuve qu’il possède la propriété . En théorie des types, l’existence est formulée au moyen du type somme dépendante, et une preuve de cette existence correspond à un terme de ce type.

Un exemple de démonstration non constructive est la preuve par contradiction. La première étape consiste à supposer que n’existe pas et à réfuter cette hypothèse par contradiction. On en déduit alors : « il n’est pas vrai que n’existe pas ». Dans une démarche classique, la dernière étape utilise la double négation pour conclure que existe. Les mathématiques constructives n’autorisent pas cette étape finale consistant à éliminer la double négation pour conclure à l’existence de .

La plupart des théories des types proposées comme fondements sont constructives, y compris la majorité de celles utilisées par les assistants de preuve. Il est possible d’ajouter des éléments non constructifs à une théorie des types, que ce soit sous forme de règle ou d’hypothèse. Cela inclut notamment certains opérateurs sur les continuations, tels que call with current continuation. Toutefois, ces opérateurs ont tendance à rompre des propriétés souhaitables telles que la canonicité et la paramétricité.

Correspondance de Curry-Howard

La correspondance de Curry–Howard désigne la similarité observée entre les logiques et les langages de programmation. L’implication en logique, « A→B », ressemble à une fonction allant du type « A » vers le type « B ». Pour diverses logiques, les règles se rapprochent des constructions que l’on trouve dans les systèmes de types des langages de programmation. La similarité va plus loin encore : l’application des règles logiques ressemble à l’exécution de programmes dans ces langages. Ainsi, la correspondance est souvent résumée par la formule : « les preuves sont des programmes » (proofs as programs).

L’opposition entre termes et types peut également être comprise comme une opposition entre implémentation et spécification. Grâce à la synthèse de programmes, l’inhabitation des types (son pendant computationnel) peut être utilisée pour construire tout ou partie d’un programme à partir de sa spécification, donnée sous la forme d’informations de type.

Inférence de types

Article principal : Inférence de types

De nombreux programmes qui reposent sur la théorie des types (par exemple les assistants de preuve interactifs) réalisent également de l’inférence de types. Cela leur permet de sélectionner automatiquement les règles que l’utilisateur souhaite appliquer, tout en réduisant le nombre d’actions nécessaires de sa part.

Domaines de recherche

Théorie des catégories

Bien que la motivation initiale de la théorie des catégories ait été très éloignée du fondationalisme, les deux domaines se sont révélés profondément liés. Comme l’écrit John Lane Bell :

« En réalité, les catégories peuvent elles-mêmes être considérées comme des théories des types d’un certain genre ; ce fait seul montre que la théorie des types est beaucoup plus étroitement liée à la théorie des catégories qu’à la théorie des ensembles. »

En bref, une catégorie peut être vue comme une théorie des types en considérant ses objets comme des types (ou sortes), c’est-à-dire : « En gros, une catégorie peut être vue comme une théorie des types dépouillée de sa syntaxe. » Plusieurs résultats importants s’ensuivent :

Cette interaction, connue sous le nom de logique catégorique, fait l’objet de recherches actives depuis lors ; on peut citer, par exemple, la monographie de Jacobs (1999).

Théorie homotopique des types

La théorie homotopique des types cherche à combiner la théorie des types et la théorie des catégories. Elle met l’accent sur les notions d’égalité, en particulier les égalités entre types. Elle se distingue principalement de la théorie des types intuitionniste par sa manière de traiter le type d’égalité.

En 2016, la théorie des types cubiques (cubical type theory) a été proposée ; il s’agit d’une version de la théorie homotopique des types qui admet une normalisation.

Définitions

Termes et types

Termes atomiques

Les types les plus fondamentaux sont appelés atomes, et un terme dont le type est un atome est appelé terme atomique. Parmi les termes atomiques courants en théorie des types, on trouve :

  • les nombres naturels, notés avec le type ;
  • les valeurs booléennes ( ), notées avec le type  ;
  • les variables formelles, dont le type peut varier.

Par exemple, les éléments suivants peuvent être des termes atomiques :

Termes fonctionnels

En plus des termes atomiques, la plupart des théories des types modernes permettent également des fonctions. Les types fonctionnels introduisent un symbole de flèche et sont définis inductivement : si et sont des types, alors la notation désigne le type d’une fonction qui prend un paramètre de type et renvoie un terme de type . Les types de cette forme sont appelés types simples.

Certains termes peuvent être déclarés directement comme ayant un type simple, comme le terme , qui prend deux nombres naturels en séquence et renvoie un nombre naturel :

Strictement parlant, un type simple n’autorise qu’une seule entrée et une seule sortie. Une lecture plus correcte du type ci-dessus est donc que est une fonction qui prend un nombre naturel et renvoie une fonction du type . Les parenthèses indiquent que n’a pas le type qui correspondrait à une fonction prenant en entrée une fonction sur les naturels et renvoyant un naturel.

La convention veut que la flèche soit associative à droite, de sorte que les parenthèses peuvent être omises dans le type de .

Lambda termes

De nouveaux termes fonctionnels peuvent être construits à l’aide d’expressions lambda, et sont appelés lambda termes. Ces termes sont également définis inductivement : un terme lambda a la forme , où est une variable formelle et est un terme. Son type s’écrit , où est le type de et est le type de [.

Le lambda terme suivant représente une fonction qui double un nombre naturel donné :

La variable est , et (comme l’indique implicitement le type du lambda terme) elle doit être de type . Le terme est de type , ce que l’on obtient en appliquant deux fois la règle d’inférence pour l’application de fonctions. Ainsi, le lambda terme est de type ce qui signifie qu’il s’agit d’une fonction prenant en argument un nombre naturel et renvoyant un nombre naturel.

Un lambda terme est souvent appelé fonction anonyme, car il ne possède pas de nom. Cette notion de fonction anonyme apparaît dans de nombreux langages de programmation.

Règles d'inférence

Application de fonction

La puissance des théories des types réside dans la spécification de comment les termes peuvent être combinés entre eux par des règles d'inférence. Les théories des types qui ont des fonctions ont également des règles d'inférence pour l'application de fonction : si est un terme de type , et est un terme de type , alors l'application de à , souvent notée , est de type . Par exemple, si on sait que et , alors on peut déduire le type des fonctions suivantes grâce à la règle d'application :

Les parenthèses indiquent l'ordre des opérations. Cependant, par convention, l'application de fonction est associative à gauche : on peut donc retirer des parenthèses lorsque c'est approprié. Dans les exemples ci-dessus, on pourrait retirer les parenthèses des deux premiers, et simplifier le troisième en .

Réduction

Les théories des types autorisant les lambda termes sont également munies de règles d'inférence appelées -réduction et -réduction. Elles généralisent la notion d'application de fonction aux lambda termes. On les écris symboliquement:

  • (-réduction).
  • , si n'est pas une variable libre dans (-réduction).

La première réduction décris comment évaluer un lambda terme : si une lambda expression est appliquée à un terme , on remplace toutes les occurrences de dans par . La seconde réduction rend explicite la relation entre lambda expression et types de fonction : si est un lambda terme, alors nécessairement, t est une fonction car elle est appliquée à . Ainsi, la lambda expression est équivalente à t, car les deux prennent un unique argument, et applique à .

par exemple, let terme suivant peut être -réduit.

Dans les théories des types qui définissent la notion d'égalité pour les types et les termes, il y des règles d'inférence qui leur sont associées : -égalité et -égalité.

Termes et types communs

Le type vide

Le type vide n'a pas de terme. On le note souvent ou . Il peut être utilisé pour démontrer qu'un type est habité, c'est-à-dire qu'il existe un terme ayant ce type : si pour un type , il est consistent de dériver un fonction de type , alors n'est pas habité, c'est-à-dire qu'aucun terme n'a le type .

Le type unit

Le type unité a exactement 1 terme canonique. On le note souvent ou , et le terme canonique. Il est également utilisé pour démontrer qu'un type est habité : si pour un type , il est consistent de dériver un fonction de type , alors est habité.

Le type booléen

Le type booléen a exactement 2 termes canoniques. Il est souvent noté ou ou . Les termes canoniques sont et .

Entiers naturels

Les entiers naturels sont généralement implémentés dans le style de l'arithmétique de Peano : il y un terme canonique pour zéro, et les entiers strictement positifs sont une succession d'application de la fonction successeur .

Les constructeurs de types

Certaines théories des types autorisent des types complexes, tels que les fonctions ou les listes, à dépendre du type de leurs arguments; on les appels des constructeurs de type. Par exemple, une théorie des types pourrait avoir un type paramétré , qui devrait correspondre à une liste de termes qui sont chacun de type . Dans ce cas, a le type , où désigne l'univers de tous les types de la théorie.

Type produit

Le type produit, noté , dépend de deux types, et ses termes sont souvent écris comme des couple . Le couple est de type , où est le type de et celui de . Chaque type produit est généralement définis avec des fonctions de destruction et .

  • renvoie
  • renvoie

Le type produit est également utilisé pour les concepts de conjonction logique et d'intersection.

Type somme

Le type somme, noté ou . Dans les langages de programmation, les types sommes peuvent être associés aux types algébriques. Chaque type est généralement défini avec des constructeurs et , qui sont injectives, et une fonction de destruction

  • renvoie
  • renvoie

Le type somme est utilisé pour les concept de disjonction logique et d'union.

Les types polymorphiques

Certaines théories autorisent également que la définition des termes dépendent des types. Par exemple, une fonction identité pour tous les types pourrait être écrite comme . La fonction est dite polymorphique en , ou générique en .

Comme autre exemple, on peut considérer la fonction , qui prend une list de type et un terme de type , et renvoie une liste où cet élément est ajouté à la fin de la liste. Le type d'une telle fonction serait , qui peut être lu comme "pour tout type a, prend une et un , et renvoie une ". Ici, est polymorphique en .

Produits et sommes

Avec le polymorphisme, les fonctions d'éliminations peuvent être définies génériquement pour tous les types produits comme et .

  • renvoie
  • renvoie

De même, les constructeurs des types sommes peuvent être définies pour tous les types des éléments d'un type somme comme et , qui sont injectives, et la fonction d'élimination peut être défini comme tel que

  • renvoie
  • renvoie

Type dépendant

Certaines théories des types permettent également aux types de dépendre des termes à la place des types. Par exemple, une théorie pourrait avoir un type , où est un terme de type encodant la longueur du vecteur. Cela permet une plus grande spécificité et sécurité des types: les fonctions qui demandent des contraintes sur la longueur du vecteur, comme le produit scalaire, peuvent encoder ces contraintes dans le type.

Il y a cependant des problèmes fondamentaux qui peuvent survenir à cause des types dépendant si la théorie ne fais pas assez attention aux dépendances qu'elle autorisent, comme le paradoxe de Girard. Le logicien Henk Barendegt à introduit le lambda cube comme outil pour étudier ce concept.

Produits et somme dépendantes

Deux types dépendants courant, les types produits et sommes dépendantes, permettent à la théorie d'encoder la logique intuitioniste BHK en agissant comme des équivalents des quantificateurs universels et existentiels; ceci est formalisé par la correspondance de Curry-Howard. Comme ils relient les produits et les sommes de la théorie des ensemble, ils sont souvent notés avec les symboles et , respectivement.

Les types sommes sont utilisés pour les paires dépendantes, où le deuxième type dépend de la valeur du premier terme. Ceci intervient naturellement en informatique lorsque des fonctions renvoient différents sortes de résultat en fonction de l'entrée. Par exemple, le type booléen est souvent défini avec une fonction d'élimination , qui prend trois arguments et ce comporte comme suit :

  • renvoie
  • renvoie

Les définitions ordinaires du demandent que et est le même type. Si la théorie autorisent les types dépendant, alors il est possible de définir un type dépendant tel que

  • renvoie
  • renvoie

Le type de peut alors être écrit comme

Le type identité

En poursuivant la notion de correspondance de Curry-Howard, le type identité est un type introduit pour refléter l'équivalence propositionnelle, s'opposant à l'équivalence syntaxique des assertions que la théorie des types donne déjà.

Un type identité nécessite deux termes du même type et s'écrit avec le symbole . Par exemple, si et sont des termes, alors est un type possible. Les termes canoniques sont créés avec une fonction de . Pour un terme , retourne le terme canonique qui habite type .

Les complexités de l'égalité dans la théorie des types en font un sujet de recherche actifs; la théorie des types homotopiques est un domaine de recherche notable qui traite principalement de l'égalité dans la théorie des types.

Les types inductifs

Les types inductifs constituent un modèle général permettant de créer une grande variété de types. En fait, tous les types décrits précédemment, et bien d'autres, peuvent être définis à l'aide des règles des types inductifs. Deux méthodes pour générer des types sont l'induction-récursion et l'induction-induction. Une méthode qui utilise uniquement des termes lambda est le codage de Scott.

Certains assistants de preuve, tels que Rocq (précédemment connu sous le nom de Coq) et Lean, sont basés sur le calcul des constructions inductives, qui est un calcul des constructions enrichi de types inductifs

Différence avec la théorie des ensembles

La fondation des mathématiques la plus couramment acceptée est la logique du premier ordre avec le langage et les axiomes de la théorie des ensembles de Zermelo-Fraenkel augmentée de l'axiome du choix, abrégée ZFC. Les théories des types ayant une expressivité suffisante peuvent également servir de fondation aux mathématiques. Il existe un certain nombre de différences entre ces deux approches.

  • La théorie des ensembles comporte à la fois des règles et des axiomes, tandis que les théories des types n'ont que des règles. Les théories des types, en général, ne possèdent pas d'axiomes et sont définies par leurs règles d'inférence.
  • La théorie et la logique des ensembles classiques possèdent le principe du tiers exclu. Lorsqu'une théorie des types encode les concepts de « et » et de « ou » sous forme de types, cela mène à la logique intuitionniste, et ne possède pas nécessairement le principe du tiers exclu.
  • Dans la théorie des ensembles, un élément n'est pas restreint à un seul ensemble. L'élément peut apparaître dans des sous-ensembles et des unions avec d'autres ensembles. Dans la théorie des types, les termes (généralement) n'appartiennent qu'à un seul type. Là où un sous-ensemble serait utilisé, la théorie des types peut utiliser une fonction prédicat ou un type produit dépendant, où chaque élément est associé à une preuve que la propriété du sous-ensemble est vérifiée pour . Là où une union serait utilisée, la théorie des types utilise le type somme, qui contient de nouveaux termes canoniques.
  • La théorie des types possède une notion de calcul intégrée. Ainsi, «  » et «  » sont des termes différents dans la théorie des types, mais ils se calculent à la même valeur. De plus, les fonctions sont définies de manière calculatoire comme des termes lambda. Dans la théorie des ensembles, «  » signifie que «  » n'est qu'une autre façon de désigner la valeur «  ». Le calcul dans la théorie des types nécessite un concept d'égalité complexe.
  • La théorie des ensembles encode les nombres sous forme d'ensembles. La théorie des types peut encoder les nombres comme des fonctions à l'aide du codage de Church, ou plus naturellement comme des types inductifs, et la construction ressemble étroitement aux axiomes de Peano.
  • Dans la théorie des types, les preuves ont des types, alors que dans la théorie des ensembles, les preuves font partie de la logique du premier ordre sous-jacente.

Les partisans de la théorie des types souligneront également sa connexion aux mathématiques constructives par le biais de l'interprétation BHK, sa connexion à la logique par la correspondance de Curry-Howard et ses connexions à la théorie des catégories.

Propriétés des théories des types

Les termes appartiennent généralement à un seul type. Cependant, il existe des théories des types qui définissent le "sous-typage". Le calcul s'effectue par application répétée de règles. De nombreuses théories des types sont fortement normalisantes, ce qui signifie que tout ordre d'application des règles mènera toujours au même résultat. Cependant, certaines ne le sont pas. Dans une théorie des types normalisante, les règles de calcul unidirectionnelles sont appelées règles de réduction, et l'application des règles « réduit » le terme. Si une règle n'est pas unidirectionnelle, on l'appelle une règle de conversion.

Certaines combinaisons de types sont équivalentes à d'autres combinaisons de types. Lorsque les fonctions sont considérées comme une « exponentiation », les combinaisons de types peuvent être écrites de manière similaire aux identités algébriques. Ainsi, , , , , .

Axiomes

La plupart des théories des types n'ont pas d'axiomes. Cela est dû au fait qu'une théorie des types est définie par ses règles d'inférence. C'est une source de confusion pour les personnes familières avec la Théorie des Ensembles, où une théorie est définie à la fois par les règles d'inférence pour une logique (telle que la logique du premier ordre) et par des axiomes concernant les ensembles.

Il arrive parfois qu'une théorie des types ajoute quelques axiomes. Un axiome est un jugement qui est accepté sans dérivation à l'aide des règles d'inférence. Ils sont souvent ajoutés pour assurer des propriétés qui ne peuvent pas être introduites proprement par les règles.

Les axiomes peuvent causer des problèmes s'ils introduisent des termes sans offrir de moyen de calculer sur ces termes. Autrement dit, les axiomes peuvent interférer avec la propriété de normalisation de la théorie des types. Voici quelques-uns des axiomes les plus couramment rencontrés :

  • « Axiome K » garantit l'« unicité des preuves d'identité ». Cela signifie que chaque terme d'un type identité est égal à la réflexivité.
  • L'« Axiome d'univalence » stipule que l'équivalence des types est l'égalité des types. La recherche sur cette propriété a mené à la théorie des types cubiques, où la propriété est vérifiée sans nécessiter d'axiome.
  • Le « Principe du tiers exclu » est souvent ajouté pour satisfaire les utilisateurs qui souhaitent la logique classique, au lieu de la logique intuitionniste.L'Axiome du Choix n'a pas besoin d'être ajouté à la théorie des types, car dans la plupart des théories des types, il peut être dérivé à partir des règles d'inférence. Cela est dû à la nature constructive de la théorie des types, où prouver qu'une valeur existe nécessite une méthode pour calculer cette valeur. L'Axiome du Choix est moins puissant dans la théorie des types que dans la plupart des théories des ensembles, car les fonctions de la théorie des types doivent être calculables et, étant piloté par la syntaxe, le nombre de termes dans un type doit être dénombrable.

Liste des théories des types

Principales

Mineures

  • Automath
  • La Théorie des Types ST
  • UTT (Unified Theory of Dependent Types de Luo)
  • Certaines formes de logique combinatoire
  • D'autres théories définies dans le lambda cube (également connu sous le nom de systèmes de types purs)
  • D'autres systèmes sous le nom de -calcul typé

Recherches Actives

Applications

Le concept de type a plusieurs domaines d'applications :

Notes et références

Voir aussi

Related Articles

Wikiwand AI