Comment la dualité des types est-elle définie?

12

Dans les types récursifs de Wadler gratuitement! [1], il a démontré deux types, et , et a déclaré qu'ils sont doubles . En particulier, il a souligné que le type n'est pas le double du premier. Il semble que la dualité en question ici soit différente de la dualité de Morgan dans la logique. Je me demande comment la dualité des types est définie, spécifiquement pour les trois types mentionnés, pourquoi le second est double du premier alors que le troisième ne l'est pas. Merci.X . ( X F ( X ) ) × X X . X ( X F ( X ) )X.(F(X)X)XX.(XF(X))×XX.X(XF(X))

[1] http://homepages.inf.ed.ac.uk/wadler/papers/free-rectypes/free-rectypes.txt

journée
la source
Je ne vais pas être d'une grande aide ici, mais cela semble une théorie de catégorie.
Anthony

Réponses:

8

Dans ce contexte, la dualité fait référence à la prise du point fixe le moins élevé dans un cas et du point fixe le plus élevé dans l'autre. Nous devons essayer de comprendre dans quel sens et sont les "moins" et "plus grandes" solutions de l' équation récursive .G = X . ( X F ( X ) ) × X F ( X ) XL=X.(F(X)X)XG=X.(XF(X))×XF(X)X

Tout d'abord, et sont en effet des points fixes (sous certaines hypothèses techniques qui restreignent la nature de ) car la comparaison mappe et donnée par et sont des isomorphismes. Notez que nous avons utilisé le fait que est un foncteur, c'est-à-dire qu'il est monotone, lorsque nous l'avons appliqué aux fonctions.G F v : F ( L ) L w : G F ( G ) vLGFv:F(L)Lw:GF(G)w ( X , ( f , x ) ) = F ( λ y : X

vxXg=g(F(λh:L.hXg)x)
F
w(X,(f,x))=F(λy:X.(X,(f,y)))(fx)
F

Supposons est toute solution de avec un isomorphisme médiation . Ensuite, nous avons des cartes canoniques définies par et Par conséquent, est le moins parce que nous pouvons le mapper à partir de n'importe quelle autre solution, et est le plus grand parce que nous pouvons le mapper à partir de n'importe quelle autre solution. Nous pourrions rendre tout cela plus précis en parlant des algèbres initiales et des houillères finales, mais je veux que ma réponse soit courte et douce, et cody a expliqué les algèbres de toute façon.F ( Y ) Y u : F ( Y ) Y α : L Y  et  β : Y G αYF(Y)Yu:F(Y)Y

α:LY and β:YG
β
αf=fYu
L G
βy=(Y,(u1,y)).
LG

En pratique, les moindres solutions sont des types de données avides et les meilleures solutions sont des types de données paresseux . Par exemple, si puis dans le premier cas , nous obtenons finis listes de « s et dans la seconde liste finie et infinie de » s.F(X)=1+A×XAAA

Andrej Bauer
la source
Ma réponse manque de preuve que et sont des points fixes (sous certaines hypothèses sur , qui peuvent rester non déclarées). Comment noter les cartes de comparaison et ? G F F ( L ) L G F ( G )LGFF(L)LGF(G)
Andrej Bauer
Ok, trouvé les cartes et avec Coq. wvw
Andrej Bauer
Il semble qu'il existe un autre candidat pour , à savoir . Quelqu'un peut-il expliquer ce qui se passe? w ( X , ( f , x ) ) = F ( λ y : Xww(X,(f,x))=F(λy:X.(X,(f,x)))(fx)
Andrej Bauer
1
Je suppose que vous avez prouvé qu'il w's'agit d'un isomorphisme, mais cela vous donne-t-il une houille de charbon valide? (Je suppose que c'est le cas, mais je peux me tromper ...) On dirait que le carré ne ferait pas la navette.
CA McCann,
Dans sa note: homepages.inf.ed.ac.uk/wadler/papers/free-rectypes/… , Wadler donne la première version. Il l'écrit cependant un peu différemment: w (X, (f, x)) = F (déplier X k) (fx). Cela fait apparaître plus clairement la structure de la halebasse et donne presque immédiatement la commutation des morphismes de corecursion appropriés. Comme le dit camcann, je pense que votre autre version ne fait pas commuer ces carrés.
cody
7

La réponse peut être comprise catégoriquement à travers la lentille de F-algèbres . La représentation catégorielle d'un type récursif dans une catégorie peut être grossièrement spécifiée en utilisant un foncteur . On travaille alors dans la catégorie des algèbres avecICF:CCF

  • comme objets: objets de avec un morphisme AC
    α:F(A)A
  • sous forme de flèches: carrés

    Morphisme de l'algèbre F

Maintenant, pour que sois le type récursif représenté par , être initial dans cette catégorie: nous avons besoinIFI

  1. Un morphismein:F(I)I
  2. Pour chaque algèbre un morphisme qui fait le trajet carré approprié.F(A,α)fold:IA

Maintenant , définir . Il est assez clair comment construire un : prenez simplement bâtiment est un peu plus délicat, explique Wadler, donc je n'essaierai pas. Notez cependant qu'il nécessite le fait que soit un foncteur , ce qui peut être vu comme une exigence de positivité.I=X.(F(X)X)Xfold

fold=λi:I.i A α:IA
inF

Maintenant, dans la théorie des catégories, nous voulons souvent considérer la situation dans laquelle toutes les flèches sont inversées. Dans ce cas, étant donné , nous pouvons considérer la catégorie de charbon de bois avecFF

  • Comme objets: objets de avec un morphisme ZC
    ω:ZF(Z)
  • Comme des flèches, des carrés comme dans le cas de l'algèbre (mais avec et inversés).Fαβ

Nous souhaitons maintenant examiner l' objet terminal de cette catégorie. Les exigences sont désormais inversées:T

  1. Un morphismeout:TF(T)
  2. Pour chaque -coalgebra , un morphisme .FZcofold:ZT

Comment faisons-nous cela? Eh bien comme prescrit WADLER, nous prenons . De la même manière qu'auparavant, nous avons Cette construction n'aurait pas fonctionné si nous avions plutôt pris .T=X.(XF(X))×X

cofold=λz:Z.(Z,ω,z):ZT
T=X.X(XF(X))
cody
la source
6

D'après mon expérience, une bonne manière opérationnelle de comprendre la dualité des types pour -calculi consiste à passer par -calculus.λπ

Lorsque vous traduisez (décomposez) des types en calcul de processus, la dualité devient simple: l' entrée est double à la sortie et vice versa . Il n'y a pas (beaucoup) plus à la dualité.

Dans -calculus, vous avez une dualité simple (et presque symétrique) entre l'entrée et la sortie. Supposons que vous ayez un type . Alors dit qu'un canal de type fait exactement une sortie, portant une valeur booléenne et un entier. Un processus habitant ce type au canal serait . Le type double, que nous pourrions écrire , exprimerait qu'une entrée se produit d'une paire où est un booléen et est un entier. Nous écrivons commeπα=(Bool,Int)ααxx¯false,7α¯(v,w)vwα¯(bool,int) . Un processus habitant en serait . α¯xc(v,w).0

Naturellement, les processus ne communiquent pas seulement des valeurs entières ou booléennes simples, mais aussi des canaux. Par exemple, le type décrit un canal qui fait une entrée de deux valeurs où est un entier et est un canal qui est utilisé pour faire exactement une sortie (d'un entier). Il est clair que son double doit être , qui décrit un canal qui produit deux éléments de données, un entier et un canal utilisé pour entrer un entier. La dualité de et signifie que nous pouvons composer de manière cohérente en parallèle un processus typeβ=(int,(int))(v,w)vwβ¯=(int,(int))αα¯Pα à un nom de canal avec un processus qui a le type au même (en supposant que les autres canaux partagés de et sont également doubles). Et de même pour et sa double .xQα¯xPQββ¯

Cela peut facilement être généralisé à des types d'ordre supérieur, par exemple est un type qui entre deux éléments où est de de type et est un canal utilisé pour émettre en sortie un peu de Type . Un exemple d'un processus ayant ce type sur un canal est le transitaire générique Simplifiant un peu, c'est essentiellement le seul habitant du type .X.(X,(X))(v,w)vXwXx

x(vw).w¯v
X.(X,(X))

Que signifie la quantification universelle au niveau du processus? L'interprétation est simple: si les données sont saisies par une variable de type, elles ne peuvent pas être utilisées comme objet d'une sortie, uniquement comme un objet. Nous ne pouvons donc pas inspecter ces données, nous ne pouvons que les transmettre ou les oublier.

Le type est double de . Comment interpréter la quantification existentielle? Assez simple: si les données sont typées par une variable de type quantifiée existentiellement, elles ne peuvent être transmises qu'à des processus qui n'inspectent pas les données, mais les transmettent uniquement (ou les oublient). En d'autres termes, nous ne pouvons le transmettre qu'aux processus qui utilisent la variable de type à quantification universelle double.X.(X,(X))X.(X,(X))

La théorie de ceci a été développée en détail dans [1, 2, 3] et dans quelques autres, plus difficiles d'accès, et liée très précisément à la logique linéaire polarisée et à sa notion de dualité en 4 .

Maintenant, vous vous demandez souvent comment cela se rapporte au type -calculi. La réponse est que -calculi peut être décomposé en -calculus de manière précise, à la suite des travaux pionniers de R. Milner 5 , et chaque type -calculus a une correspondance précise avec les types -calculus. La dualité au niveau du type de processus se traduit par une dualité au niveau du type de fonction. C'est juste que l'application de la fonction est moins une opération symétrique, et la simplicité de la dualité au niveau du processus est cachée dans les complications de -calculus.λ π λ π λλλπλπλ

1 N. Yoshida et al., Strong Normalization in the -Calculusπ .

2 K. Honda et al., Genericity and the -Calculusπ .

3 K. Honda et al., Control in the -Calculusπ .

4 K. Honda et al., Une correspondance exacte entre un pi-calcul typé et des réseaux de preuve polarisés .

5 R. Milner, Fonctions en tant que processus .

Martin Berger
la source
1
re: Votre point sur le nombre d'habitants de type ∀X. (X, (X) ↑) ↓. Existe-t-il alors un analogue de "théorèmes libres" pour le pi-calcul? Si oui, où est-ce discuté?
Dominic Mulligan
1
Bonjour @DominicMulligan, oui il y a des "théorèmes libres" et nous avons étudié cela un peu dans [1, 2]. Je pense que beaucoup plus pourrait être dit dans ce sens.
Martin Berger
1
@MartinBerger: Pouvez-vous utiliser la paramétricité pour déterminer quelle est la "bonne" notion d'équivalence de processus pour le pi-calcul typé? Par exemple, dans le système F, la relation logique paramétrique correspond à l'équivalence contextuelle. Par analogie, je m'attendrais à ce que toute notion d'équivalence de processus correspondant à la relation logique paramétrique pour le pi-calcul soit particulièrement intéressante.
Neel Krishnaswami
@NeelKrishnaswami: Oui, c'est une question intéressante. Nous avons étudié cela dans [2] pour le pi-calcul intégrant le système F de manière entièrement abstraite et avons utilisé les résultats dans la preuve d'abstraction complète (par exemple une caractérisation de bisimulation typée). Je ne pense pas que cela ait été exploré plus généralement. Pour commencer, il existe une infinité de types -calculi typés. Et à mesure que nous nous éloignons de jolis fragments typés déterministes, cela va probablement devenir plus difficile. Jusqu'à présent, presque toute la théorie des types concurrente concerne les fragments déterministes. Il serait fascinant de tenter des généralisations de grande envergure. π
Martin Berger
Les caractérisations basées sur la bisimulation sont utiles pour le raisonnement pratique, car elles ne nécessitent pas de fermeture dans tous les contextes.
Martin Berger