De nombreux manuels couvrent les types d'intersection dans le lambda-calcul. Les règles de typage pour l'intersection peuvent être définies comme suit (en plus du lambda-calcul simplement tapé avec sous-typage):
Les types d'intersection ont des propriétés intéressantes par rapport à la normalisation:
- Un lambda-term peut être saisi sans utiliser la règle si elle est fortement normalisée.
- Un lambda-term admet un type ne contenant pas ssi il a une forme normale.
Et si au lieu d'ajouter des intersections, nous ajoutons des unions?
Le lambda-calcul avec des types simples, des sous-types et des unions a-t-il une propriété similaire intéressante? Comment caractériser les termes typables avec union?
lambda-calculus
type-theory
logic
Gilles 'SO- arrête d'être méchant'
la source
la source
Réponses:
Dans le premier système, ce que vous appelez le sous-typage sont les deux règles suivantes:
Ils correspondent aux règles d'élimination pour ; sans eux, le conjonctif est plus ou moins inutile.∧∧ ∧
Dans le deuxième système (avec les connecteurs et , auxquels nous pourrions également ajouter un ), les règles de sous-typage ci-dessus ne sont pas pertinentes, et je pense que les règles d'accompagnement que vous aviez en tête sont les suivantes:→ ⊥∨ → ⊥
Pour ce que ça vaut, ce système permet de taper (en utilisant la règle ), qui ne peut pas être tapé avec seulement des types simples, qui a une forme normale, mais qui ne normalise pas fortement .( λ x . I) Ω : A → A ⊥ E
Pensées aléatoires: (peut-être que cela vaut la peine de demander sur TCS)
Cela m'amène à conjecturer que les propriétés associées sont quelque chose comme:
Exercice: prouve-moi le contraire.
De plus, il semble que ce soit un cas dégénéré, nous devrions peut-être envisager d'ajouter ce type à l'image. Pour autant que je m'en souvienne, cela permettrait d'obtenir ?A ∨ ( A → ⊥ )
la source
Je veux juste expliquer pourquoi les types d'intersection sont bien adaptés pour caractériser les classes de normalisation (fort, tête ou faible), alors que d'autres systèmes de types ne le peuvent pas. (simplement tapé ou système F).
La principale différence est que vous devez dire: "si je peux taper et M 1 → M 2 alors je peux taper M 1 ". Ce n'est souvent pas vrai dans les types sans intersection car un terme peut être dupliqué:M2 M1→ M2 M1
puis taper signifie que vous pouvez taper les deux occurrences de N mais pas avec le même type, par exemple M : T 1 → T 2 → T 3MNN N
Avec les types d'intersection, vous pouvez transformer ceci en:
M : T 1 ∧ T 2 → T 1 ∧ T 2 → T 3
C'est pourquoi je ne pense pas qu'il existe une caractérisation facile de la normalisation pour les types d'union.
la source