Système F
pour l'artiste électronique de musique de danse, voient le transporter en bac Corsten .
Le système F , également connu sous le nom de calcul polymorphe du lambda ou calcul de second ordre du lambda, est un calcul de lambda dactylographié par . Il a été découvert indépendamment par le Jean-Yves Girard du logicien et le John C. Reynolds de l'informaticien . Le système F formalise la notion du polymorphisme paramétrique dans les langages de programmation
Juste comme le lambda le calcul a des variables s'étendre au-dessus des fonctions, et des reliures pour elles, le calcul de second ordre de lambda a des variables s'étendre au-dessus des types de , et des reliures pour elles.
Comme exemple, le fait que la fonction d'identité peut avoir n'importe quel type de la forme A→ A être formalisé dans le système F comme jugement
là où le α est un type variable de .
Sous l'isomorphisme de Cari-Howard de , le système F correspond à une logique de second ordre .
Le système F, ainsi que des calculs bien plus expressifs de lambda, peut être vu en tant qu'élément du cube en lambda.
Logique et attributs
Le type booléen du est défini comme : , où le α est un type variable de . Ceci produit les deux définitions suivantes pour les valeurs booléennes TRUE et FALSE :VRAI : = FAUX : =
Puis, avec ces deux λ-limites, nous pouvons définir quelques opérateurs de logique : ET : = OU : = PAS : = x^ du VRAI FAUX
Il n'y a vraiment aucun besoin de fonction du IFTHENELSE en tant qu'une peut juste employer des limites dactylographiées booléennes crues comme fonctions de décision. Cependant, si on est demandé :
IFTHENELSE de
: = suffira. Un attribut de est une fonction qui renvoie une valeur booléenne. L'attribut le plus fondamental est ISZERO qui renvoie TRUE si et seulement si son argument est le numéro 0 d'église : ISZERO de : = n de λ. ) TRUE FAUX
Structures du système F
Le système F permet aux constructions récursives d'être incluses d'une façon normale, liée à celle dans le type la théorie de Martin-Löf's de . Les structures d'abstrait (s) sont créées using les constructeurs de . Ce sont des fonctions dactylographiées comme : .
La récurrence est manifestée quand lui-même apparaît à moins d'un des types . Si vous avez de ces constructeurs, vous pouvez définir le type de comme :
Par exemple, les nombres normaux peuvent être définis comme datatype inductif avec le Le type du système F correspondant à cette structure est
0 de
: =
1 de x
2 de f x
3 de f x)
Si nous renversons l'ordre des arguments au curry (
Utilisation dans des langages de programmation
La version du système F utilisée en cet article est en tant qu'explicite-dactylographiée, ou Église-modèle, calcul. L'information de dactylographie contenue dans les λ-limites rend le de Type-vérification franc. Les puits (1994) de Joe de ont arrangé un " ; problem" ouvert embarrassant ; en montrant que le type vérification est le undecidable pour une variante de Cari-modèle du système F, c., un qui manque des annotations de dactylographie explicites.
Le résultat des puits implique que le type de l'inférence pour le système F est impossible. Une restriction du système F connue sous le nom de " ; Hindley-Milner ", ou simplement " ; HM" ; , a un type facile algorithme d'inférence et est employé pour beaucoup le fortement dactylographié du les langages de programmation fonctionnelle tel que le Haskell et le ml .
F_ de système \ omega
Le système
Il y a généralement une famille des systèmes définis inductivement par les sortes de autorisées dans chaque système :
le
Dans la limite, nous pouvons définir le \ underset {1 \ leq i} {\ bigcup} F_i
= de
C'est-à-dire, le
Noter cela bien que le
.
| Random links: | Fraise, la Californie | Marion Williams | Theun de Vries | Tour de BankWest | Sistema_F |