Système de types basé sur la théorie naïve des ensembles


11

Si je comprends bien, en informatique, les types de données ne sont pas basés sur la théorie des ensembles à cause de choses comme le paradoxe de Russell, mais comme dans les langages de programmation du monde réel, nous ne pouvons pas exprimer des types de données aussi complexes que "ensemble qui ne se contient pas", pouvons-nous dire qu'en pratique, le type est un ensemble infini de ses membres où l'appartenance à une instance est définie par un nombre de caractéristiques intrinsèques à ce type / ensemble (existence de certaines propriétés, méthodes)? Si non, quel serait le contre-exemple?


1
Le paradoxe de Russell n'a rien à voir directement avec lui.
Andrej Bauer

Réponses:


11

La principale raison pour éviter les ensembles dans la sémantique des types est qu'un langage de programmation typique nous permet de définir des fonctions récursives arbitraires. Par conséquent, quelle que soit la signification d'un type, il doit avoir la propriété virgule fixe. Le seul ensemble avec une telle propriété est l'ensemble singleton.

Pour être plus précis, une valeur définie de manière récursive de Type (où typiquement est un type de fonction) est définie par une équation de point fixe où peut être n'importe quel programme. Si est interprété comme l'ensemble alors nous nous attendrions à ce que chaque ait un point fixe. Mais le seul ensemble avec cette propriété est le singleton.τ τ v = Φ ( v ) Φ : τ τ τ T f : T T Tvττv=Φ(v)Φ:τττTf:TTT

Bien sûr, vous pourriez également réaliser que le coupable est la logique classique. Si vous travaillez avec la théorie des ensembles intuitionniste, il est cohérent de supposer qu'il existe de nombreux ensembles avec une propriété à point fixe. En fait, cela a été utilisé pour donner la sémantique du langage de programmation, voir par exemple

Alex Simpson, Computational Adequacy for Recursive Types in Models of Intuitionistic Set Theory , In Annals of Pure and Applied Logic, 130: 207-275, 2004.


7

Le sous - typage sémantique est basé sur une interprétation théorique sous-jacente des types, où le sous-typage est un sous-ensemble. Le travail original , je crois, est de Castagna dans le contexte du langage de traitement XML CDuce. Les types correspondent à des ensembles de documents XML. Les idées ont depuis été réappliquées au -calculus et aux objets et classes de calcul .π


1
Il y a des précurseurs à Castagna. Il y a longtemps, les gens utilisaient déjà la relation de sous-ensemble pour modéliser le sous-typage dans les modèles PER. Là, un type correspond à une relation d'équivalence partielle (PER) et le sous-typage est simplement l'inclusion de telles relations.
Andrej Bauer

4

À quelques exceptions près (dont Dave Clarke cite), la sémantique simple des types théoriques des ensembles est difficile à utiliser. La raison en est que l'abstraction des données ne joue pas très bien avec la sémantique de la théorie des ensembles.

Le problème de base est plus facilement visible dans un langage totalement purement fonctionnel avec des types polymorphes, et considérons le type polymorphe . En sémantique ensembliste naïve des types, nous interpréter l'espace fonctionnel que l' espace de fonction ensembliste, puis interpréter le quantificateur universel en tant que produit sur une (petite) univers des ensembles . C'est,Uα.ααU

[[α.αα]]=ΠXU.XX

Toutefois, notez que cette interprétation des types inclut des fonctions qui font quelque chose de différent à chaque élément de - nous pouvons branche sur pour donner une autre fonction dans pour chaque . En revanche, le type polymorphe ne contient que la fonction d'identité, car les seules opérations que le langage de programmation vous permettra d'effectuer au type celles qui fonctionnent à tous les types.U X X X U αUUXXXUα

Cette sémantique ne peut donc (par exemple) justifier aucune optimisation basée sur le fait que l'identité est le seul habitant de .α.αα


Neel, je ne pense pas que cette réponse soit logique. Si la sémantique du langage est la sémantique standard de style F, alors un compilateur pourrait très bien faire l'optimisation, en fonction du système de type. Si la sémantique est la sémantique de la théorie des ensembles, l'optimisation serait alors fausse. Le modèle que vous utilisez pour les types n'y entre pas.
Sam Tobin-Hochstadt

Sam, je ne comprends pas votre point: on dirait que vous êtes complètement d'accord avec moi! La sémantique standard de la théorie des ensembles ne peut pas prouver que le seul habitant de ce type est l'identité, vous avez donc besoin d'une sémantique différente.
Neel Krishnaswami

1
@Neel: le problème que vous décrivez persiste même lorsque nous nous éloignons des décors. La solution n'est pas de changer la catégorie des ensembles avec autre chose, mais de modéliser la paramétricité différemment. À savoir, il faut utiliser la paramétricité relationnelle , comme vous le savez sûrement. Mais les choses se passent aussi bien en sets, si je ne me trompe pas. Le "seul" problème avec les ensembles est le manque de points fixes (tant au niveau des valeurs récursives que des types récursifs).
Andrej Bauer

1
Ah, je pense que je comprends pourquoi je vous confond avec Sam! Je ne veux certainement pas laisser entendre qu'il est peu judicieux d'utiliser un modèle de théorie des ensembles naïf, mais simplement que ce modèle donne souvent des réponses inutiles - c'est pourquoi j'ai dit "difficile à utiliser", et non "mauvais". Vous pouvez bien sûr utiliser des ensembles pour construire un modèle utile (c'est-à-dire, relationnellement), mais nous n'interprétons plus les types-comme-ensembles de la manière suggérée dans la question. (De plus, comme vous le savez, avec le polymorphisme imprédicatif, il n'y a pas de modèle naïf, mais la paramétricité est toujours significative de manière prédictive.)
Neel Krishnaswami

1
Je pense que votre point concerne la correspondance entre la sémantique - une sémantique à ensemble théorique ne convient pas au polymorphisme de style System F, car elle a des habitants inexprimables. Mais ce n'est pas un point contre la sémantique de la théorie des ensembles, juste une déclaration que notre sémantique devrait être d'accord. Si notre langage nous permet d'exprimer les fonctions dont vous parlez (comme le fait Typet Racket, par exemple), alors nous pouvons vouloir la sémantique de la théorie des ensembles.
Sam Tobin-Hochstadt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.