Σύστημα F

Από testwiki
Αναθεώρηση ως προς 16:01, 2 Φεβρουαρίου 2024 από τον imported>ION5+5+5
(διαφορά) ← Παλαιότερη αναθεώρηση | Τελευταία αναθεώρηση (διαφορά) | Νεότερη αναθεώρηση → (διαφορά)
Μετάβαση στην πλοήγηση Πήδηση στην αναζήτηση

Πρότυπο:Χωρίς παραπομπές To Σύστημα F, επίσης γνωστό ως πολυμορφικός λ-λογισμός των Ζιράρ-Ρέινολντς και λ-λογισμός δευτέρας τάξης, είναι ένας λ-λογισμός με τύπους που επεκτείνει τον λ-λογισμό με απλούς τύπους εισάγοντας ένα μηχανισμό καθολικής ποσόδειξης επί των τύπων. Ως εκ τούτου, το Σύστημα F αποτελεί φορμαλισμό της έννοιας του παραμετρικού πολυμορφισμού στις γλώσσες προγραμματισμού, και μια θεωρητική βάση γλωσσών όπως η Haskell και η ML. Το Σύστημα F επινοήθηκε ανεξάρτητα από τον λογικολόγο Ζαν-Υβ Ζιράρ και τον επιστήμονα υπολογιστών Τζον Σ. Ρέινολντς.

Επεκτείνοντας το λ-λογισμό με απλούς τύπους που έχει μεταβλητές επί των όρων, το Σύστημα F έχει επιπρόσθετα μεταβλητές επί των τύπων. Για παράδειγμα, το γεγονός ότι η ταυτοτική συνάρτηση μπορεί να έχει οιονδήποτε τύπο της μορφής A→ A γράφεται στο Σύστημα F ως

Λα.λxα.x:α.αα

όπου α είναι μεταβλητή τύπου. Το κεφαλαίο Λ χρησιμοποιείται συνήθως για να εκφράσει συναρτήσεις στο επίπεδο των τύπων, σε αντιπαραβολή με το πεζό λ που χρησιμοποιείται για συναρτήσεις στο επίπεδο των όρων.

Ως ένα σύστημα αναγωγής όρων, το Σύστημα F είναι ισχυρά κανονικοποιήσιμο. Η εξαγωγή τύπων στο Σύστημα F χωρίς ρητές επισημειώσεις τύπων είναι ωστόσο μη αποφάνσιμη. Με τον ισομορφισμό Κάρι-Χάουαρντ το Σύστημα F αντιστοιχίζεται στην διαισθητική λογική δευτέρας τάξης με μόνη την καθολική ποσόδειξη. Το Σύστημα F μπορεί να θεωρηθεί τμήμα του λ-κύβου, μαζί με εκφραστικότερους λ-λογισμούς με τύπους, συμπεριλαμβανομένων αυτών με εξαρτώμενους τύπους.

Λογική και Κατηγορήματα

Ο τύπος του Μπουλ ορίζεται ως: α.ααα, όπου α είναι μεταβλητή τύπου. Αυτός συνεπάγεται τους ακόλουθους ορισμούς για τις αληθοτιμές 𝐓 και 𝐅:

𝐓=Λα.λxαλyα.x
𝐅=Λα.λxαλyα.y

Εν συνεχεία, με αυτούς τους δύο λ-όρους, μπορούμε να ορίσουμε μερικούς λογικούς τελεστές:

AND=λx𝖡𝗈𝗈𝗅𝖾𝖺𝗇λy𝖡𝗈𝗈𝗅𝖾𝖺𝗇.x𝖡𝗈𝗈𝗅𝖾𝖺𝗇y𝐅
OR=λx𝖡𝗈𝗈𝗅𝖾𝖺𝗇λy𝖡𝗈𝗈𝗅𝖾𝖺𝗇.x𝖡𝗈𝗈𝗅𝖾𝖺𝗇𝐓y
NOT=λx𝖡𝗈𝗈𝗅𝖾𝖺𝗇.x𝖡𝗈𝗈𝗅𝖾𝖺𝗇𝐅𝐓

Απουσιάζει η ανάγκη για μια IFTHENELSE συνάρτηση καθώς οι ίδιοι οι όροι τύπου 𝖡𝗈𝗈𝗅𝖾𝖺𝗇 μπορούν να χρησιμοποιηθούν ως συναρτήσεις απόφασης. Μολοταύτα, αν ζητηθεί γράφεται ως:

IFTHENELSE=Λα.λx𝖡𝗈𝗈𝗅𝖾𝖺𝗇λyαλzα.xαyz

Ένα κατηγόρημα είναι συνάρτηση που επιστρέφει μια τιμή τύπου 𝖡𝗈𝗈𝗅𝖾𝖺𝗇. Το θεμελιωδέστερο κατηγόρημα είναι το ISZERO που επιστρέφει 𝐓 αν και μόνο αν το όρισμά του είναι ο αριθμός Τσερτς 0:

ISZERO=λnα.(αα)αα.n𝖡𝗈𝗈𝗅𝖾𝖺𝗇(λx𝖡𝗈𝗈𝗅𝖾𝖺𝗇.𝐅)𝐓

Δομές του Συστήματος F

Το Σύστημα F επιτρέπει την φυσική ενσωμάτωση αναδρομικών κατασκευών, σε σχέση με τη θεωρία τύπων του Μάρτιν-Λεφ. Οι αφηρημένες δομές (S) δημιουργούνται με τη χρήση κατασκευαστών, δηλαδή συναρτήσεων με τύπο:

K1K2S.

Η αναδρομικότητα εμφανίζεται όταν το ίδιο το S παρουσιάζεται μεταξύ κάποιου εκ των τύπων Ki. Δοθέντων m τέτοιων κατασκευαστών, ο τύπος του S ορίζεται ως:

α.(K11[α/S]α)(K1m[α/S]α)α

Για παράδειγμα, οι φυσικοί αριθμοί μπορούν να ορισθούν ως ο επαγωγικός τύπων δεδομένων N με κατασκευαστές

𝑧𝑒𝑟𝑜:N
𝑠𝑢𝑐𝑐:NN

Ο αντίστοιχος τύπος στο Σύστημα F είναι α.α(αα)α. Οι όροι αυτού του τύπου συνιστούν μια τυποποιημένη εκδοχή των αριθμών Τσερτς, μερικοί εκ των οποίων είναι:

0 := Λα.λxα.λfαα.x
1 := Λα.λxα.λfαα.fx
2 := Λα.λxα.λfαα.f(fx)
3 := Λα.λxα.λfαα.f(f(fx))

Αντιστρέφοντας τη σειρά των ορισμάτων (i.e., α.(αα)αα) ο αριθμός Τσερτς για το n είναι μια συνάρτηση που δέχεται μια συνάρτηση f ως όρισμα και επιστρέφει την n-ιοστή δύναμη του f. Με άλλα λόγια, ένας αριθμός Τσερτς είναι μια συνάρτηση υψηλής τάξης – δέχεται μια συνάρτηση f ενός ορίσματος και επιστρέφει μια άλλη συνάρτηση ενός ορίσματος.

Χρήση στις γλώσσες προγραμματισμού

Η εκδοχή του Συστήματος F που χρησιμοποιήθηκε στο παρόν άρθρο είναι τύπου Τσερτς (οι τύποι επισημειώνονται ρητώς). Η πληροφορία τυποποίησης που εμπεριέχεται στους λ-όρους κάνει τον έλεγχο τύπων ευθύ. Για μια παραλλαγή τύπου Κάρι (χωρίς ρητή επισημείωση τύπων) του Συστήματος F ο Τζο Ουέλς (1994) περιέγραψε ένα "ντροπιαστικό ανοιχτό πρόβλημα" αποδεικνύοντας ότι ο έλεγχος τύπων είναι μη αποφάνσιμος.[1][2]

Το αποτέλεσμα του Ουέλς υπονοεί ότι η εξαγωγή τύπων για το Σύστημα F είναι αδύνατη. Ένας περιορισμός του Συστήματος F, γνωστός ως "Χίντλεϊ-Μίλνερ", ή απλά "HM", έχει ένα εύκολο αλγόριθμο εξαγωγής τύπων και χρησιμοποιείται για πολλές συναρτησιακές γλώσσες προγραμματισμού όπως η Haskell 98 και η ML. Προϊόντος του χρόνου, καθώς οι περιορισμοί των συστημάτων τύπου Χίντλεϊ-Μίλνερ έγιναν εμφανείς, οι γλώσσες σταθερά κινούνταν προς εκφραστικότερες λογικές για τα συστήματα τύπων τους. Για παράδειγμα, από το 2008 ο GHC, ένας μεταγλωττιστής της Haskell, υπερέβη το HM, και τώρα χρησιμοποιεί το Σύστημα F επεκτεταμένο με μη συντακτική ισότητα τύπων.

Σύστημα Fω

Ενώ το Σύστημα F αντιστοιχίζεται με τον πρώτο άξονα του λ-κύβου του Μπάρεντρεγκτ, το Σύστημα Fω συνδυάζει τον πρώτο άξονα (πολυμορφισμό) με το δεύτερο άξονα (τελεστές τύπων) αποτελώντας ένα διαφορετικό, πολυπλοκότερο σύστημα.

Το Σύστημα Fω μπορεί να οριστεί επαγωγικά σε μια οικογένεια συστημάτων, όπου η επαγωγή βασίζεται στα είδη που επιτρέπονται σε κάθε σύστημα:

  • Το Fn επιτρέπει τα είδη:
    • (είδος των τύπων) και
    • JK όπου JFn1 και KFn (είδος των συναρτήσεων από τύπους σε τύπους, όπου ο τύπος όρισμα είναι κατώτερης τάξης)

Στο όριο μπορεί να ορισθεί το Fω ως

  • Fω=1iFi

Δηλαδή το Fω είναι το σύστημα που επιτρέπει συναρτήσεις από τύπους σε τύπους όπου το όρισμα και το αποτέλεσμα μπορούν να είναι οιασδήποτε τάξης.

Σημειώνεται ότι τα ορίσματα αυτών των απεικονίσεων στο Fω παρά την απουσία περιορισμών στην τάξη τους, προέρχονται από ένα περιορισμένο σύμπαν: πρέπει να είναι τύποι και όχι τιμές. Το Σύστημα Fω δεν επιτρέπει απεικονίσεις από τιμές σε τύπους (εξαρτώμενοι τύποι), αλλά επιτρέπει απεικονίσεις από τιμές σε τιμές (λ αφαίρεση), από τύπους σε τιμές (Λ αφαίρεση, εμφανίζεται και ως ) και από τύπους σε τύπους (λ αφαίρεση στο επίπεδο των τύπων).

Δείτε επίσης

  • Οι υπαρξιακοί τύποι είναι το υπαρξιακώς ποσοδειγμένο αντίστοιχο των καθολικών τύπων.
  • Το System F<: επεκτείνει το Σύστημα F με υποτύπους, προσεγγίζοντας πολύ περισσότερο πραγματικές γλώσσες προγραμματισμού της οικογένειας ML.

Αναφορές

Πρόσθετες Πηγές

Εξωτερικοί σύνδεσμοι