Question

De nombreux manuels couvrent intersection types dans le lambda-calcul. Les règles de frappe pour intersection peuvent être définis comme suit (au-dessus du lambda-calcul simplement typé avec le sous-typage):

$$ \ Dfrac {\ Gamma \ vdash M: T_1 \ quad \ Gamma \ vdash M: T_2}       {\ Gamma \ vdash M: T_1 \ wedge T_2}       (I \ wedge) \ Qquad \ qquad \ Dfrac {}       {\ Gamma \ vdash M: \ top}       (\ Top I) $$

types d'intersection ont des propriétés intéressantes en ce qui concerne la normalisation:

  • Un lambda terme peut être saisie sans utiliser le \ $ haut I $ règle ssi il est fortement normalisant.
  • Un lambda terme admet un type ne contenant pas $ \ top $ ssi il a une forme normale.

Et si au lieu d'ajouter des intersections, nous ajoutons les syndicats?

$$ \ Dfrac {\ Gamma \ vdash M: T_1}       {\ Gamma \ vdash M: T_1 \ Vee T_2}       (\ Vee I_1) \ Qquad \ qquad \ Dfrac {\ Gamma \ vdash M: T_2}       {\ Gamma \ vdash M: T_1 \ Vee T_2}       (\ Vee I_2) $$

Est-ce que le lambda-calcul avec des types simples, et le sous-typage syndicats ont des biens similaires intéressante? Comment les termes typables avec union se caractériser?

Était-ce utile?

La solution

Dans le premier système ce que vous appelez sous-typage ces deux règles:

$$ \ dfrac {y, x: T_1 \ vdash M: S} {y, x: T_1 ? T_2 \ vdash M: S} (?E_1) \ quad \ dfrac {G, x: T_2 \ M vdash : S} {G, x: T_1 ? T_2 \ vdash M: S} (?E_2) $$

Ils correspondent à des règles d'élimination pour $ ? $; sans eux, le $ conjonctifs ? $ est plus ou moins inutile.

Dans le second système (avec conjonctions $ ? $ et $ ? $, ??auquel nous pourrions ajouter un $ ? $), ce qui précède les règles de sous-typage ne sont pas pertinentes, et je pense que les règles d'accompagnement que vous aviez à l'esprit sont les suivantes :

$$ \ dfrac {G, x: T_1 \ vdash M: S \ quad G, x: T_2 \ vdash M: S} {y, x: T_1 ? T_2 \ vdash M: S} (?E) \ quad \ dfrac {} {G, x: {?} \ vdash M: S} ({?} E) $$

Pour ce que ça vaut la peine, ce système permet de taper $ O (?x I.): A ? A $ (en utilisant le $ {?} E $ rule), qui ne peut être saisi avec juste des types simples, qui a une normale forme, mais n'est pas fortement normalisant.


pensées au hasard: (peut-être cela est demandé sur la valeur TCS)

Cela conduit à me conjecture que les propriétés connexes sont quelque chose comme:

  • a M $ ? terme $ admet un type ne contenant pas $ $ ? ssi $ $ MN a une forme normale pour tous les N $ $ qui a une forme normale. ($ ? $ échoue les deux tests, mais les passer ? terme ci-dessus)
  • a peut être typé M $ ? terme $ sans utiliser le $ {?} E $ rule $ ssi MN $ est fortement normalisant pour tous N $ fortement normalisant $.

Exercice:. me prouver

En outre, il semble être un cas dégénérée, nous devrions peut-être envisager d'ajouter ce type dans l'image. Pour autant que je me souviens, il permettrait d'obtenir $ A ? (A ? {?}) $?

Autres conseils

Je veux juste expliquer pourquoi les types d'intersection sont bien adaptés pour caractériser les classes de normalisation (forte, la tête ou faible), alors que d'autres systèmes de type ne peut pas. (Simplement typé ou système F).

La principale différence est que vous avez à dire: « si je peux taper M_2 $ $ et M_1 $ ? M_2 $, alors je peux taper M_1 $ $ ». Ceci est souvent le cas dans les types non-intersection, car un terme peut être dupliqué:

$$ (\ lambda x.Mxx) N ? MNN $$

et puis en tapant des moyens $ MNN $ que vous pouvez taper les deux occurrences de $ N $ mais pas avec le même type, par exemple $$ M: T_1 ? T_2 ? T_3 \ N qquad: T_1 \ qquad N: T_2 $$ Avec les types d'intersection, vous pouvez le transformer en: $$ M: T_1 \ wedge T_2 ? T_1 \ wedge T_2 ? T_3 \ qquad N: T_1 \ wedge T_2 $$ puis l'étape cruciale est maintenant très simple: $$ (\ lambda x.Mxx): T_1 \ wedge T_2 ? T_3 \ qquad N: T_1 \ wedge T_2 $$ donc $ (\ lambda x.Mxx) N $ peut par dactylographié avec des types d'intersection.

sur les types de syndicats: supposons que vous pouvez taper $ (\ lambda x.xx) (\ lambda aa) $ avec un certain type d'union, vous pouvez également taper $ \ lambda $ x.xx et obtenir pour certains types $ S, T_1, \ points $ $$ x: T_1 \ Vee T_2 \ Vee \ points \ Vee T_n ?xx: S $$ Mais il faut encore prouver que pour chaque i $ $, $ x: T_i?xx: S $ qui semble impossible même est $ S $ est un type d'union.

Voilà pourquoi je ne pense pas qu'il y ait une caractérisation facile sur la normalisation des types d'union.

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top