Professional Documents
Culture Documents
Εφαρμογές της λογικής στην πληροφορική PDF
Εφαρμογές της λογικής στην πληροφορική PDF
ΓΙΩΡΓΟΣ ΚΟΛΕΤΣΟΣ
ΕΦΑΡΜΟΓΕΣ
ΤΗΣ ΛΟΓΙΚΗΣ
ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ
ΠΕΤΡΟΣ ΣΤΕΦΑΝΕΑΣ
ΓΕΩΡΓΙΟΣ ΚΟΛΕΤΣΟΣ
Συγγραφή
Πέτρος Στεφανέας
Γεώργιος Κολέτσος
Κριτικός αναγνώστης
Κωνσταντίνος Δημητρακόπουλος
Συντελεστές έκδοσης
Γλωσσική Επιμέλεια: Δέσποινα Λαμπαδά
Τεχνική Επεξεργασία: Αικατερίνη Ξύστρα
ISBN: 978-960-603-368-1
Το παρόν έργο αδειοδοτείται υπό τους όρους της άδειας Creative Commons Αναφορά Δημιουργού - Μη Εμπορική Χρήση -
Όχι Παράγωγα Έργα 3.0. Για να δείτε ένα αντίγραφο της άδειας αυτής επισκεφτείτε τον ιστότοπο
https://creativecommons.org/licenses/by-nc-nd/3.0/gr/
ΕΙΣΑΓΩΓΗ 2
ΕΥΧΑΡΙΣΤΙΕΣ 5
ΘΕΩΡΙΑ ΤΥΠΩΝ 35
λ− ΛΟΓΙΣΜΟΣ ΜΕ ΑΠΛΟΥΣ ΤΥΠΟΥΣÀ LA CURRY 35
ΕΠΕΚΤΑΣΕΙΣ ΤΟΥ λ−ΛΟΓΙΣΜΟΥ ΜΕ ΑΠΛΟΥΣ ΤΥΠΟΥΣ 44
ΕΞΙΣΩΤΙΚΗ ΛΟΓΙΚΗ 55
LISP 121
ΛΙΣΤΕΣ 121
Αποτίμηση 128
ΜΕΤΑΒΛΗΤΕΣ 129
ΣΥΝΘΗΚΕΣ 130
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΧΡΗΣΗ ΕΦΑΡΜΟΓΩΝ 134
ΑΝΑΔΡΟΜΗ 137
ΕΙΣΟΔΟΣ-ΕΞΟΔΟΣ 137
ΕΠΑΝΑΛΗΨΗ 139
Bibliography 142
1
ΕΙΣΑΓΩΓΗ
Η λογική παίζει έναν ιδιαίτερα σημαντικο ρόλο τόσο στην θεωρητική, όσο και
στην εφαρμοσμένη πληροφορική. Η θεωρία υπολογισμού (computability theory), για
παράδειγμα, που έχει βασιστεί κυρίως στις εργασίες του Alonzo Church και του Alan
Turing, αποτελεί αναπόσπαστο κομμάτι της μαθηματικής λογικής και της θεωρητικής
πληροφορικής. Η αντιστοιχία Curry-Howard (Curry-Howard correspondence) περι-
γράφει την αντιστοίχιση μεταξύ τυπικών αποδείξεων και λογισμικού. Η σημασιολογική
εκδοχή του Παγκόσμιου Ιστού (semantic web) βασίζεται στην περιγραφική λογική
(description Logic). Οι αλγεβρικές προδιαγραφές (algebraic specifications) με τη βοή-
θεια της καθολικής άλγεβρας (universal algebra), της εξισωτικής λογικής (equational
logic) και της θεωρίας κατηγοριών (category theory) προσφέρουν το θεωρητικό υπ-
όβαθρο για μια σειρά πεδία της πληροφορικής όπως οι γλώσσες προγραμματισμού και
προδιαγραφών και η σημασιολογία τους, η τεχνολογία λογισμικού, η επαλήθευση της
ορθότητας προγραμμάτων κα.
Στο βιβλίο αυτό παρουσιάζουμε εισαγωγικά τρεις μόνο από τις περιοχές εφαρ-
μογών της λογικής στην πληροφορική: λογική και συναρτησιακός προγραμματισμός
(functional programming), θεωρία τύπων (type theory) και εξισωτική λογική με
εφαρμογές στις αλγεβρικές προδιαγραφές (algebraic specifications). Ο συναρτησι-
ακός προγραμματισμός ειναι ένα δηλωτικό (declarative) προγραμματιστικό παράδειγμα
που βασίζεται στον λ-λογισμό (λ−calculus). Ο λ−λογισμός είναι ένα τυπικό λογικό
σύστημα για την έκφραση της υπολογισιμότητας (computability). Μετά την εισαγ-
ωγή του από τον Alonzo Church με σκοπό την τυποποίηση της αποτελεσματικής
υπολογισιμότητας (effective computability) συνέβαλε στην αρνητική απάντηση στο
Entscheidungsproblem1 του Hilbert. Με τη βοήθεια του λ−λογισμού με τύπους
διατυπώνεται στη συνέχεια η αντιστοιχία Curry-Howard «των αποδείξεων ως προ-
γραμμάτων (proofs as programs)». Τέλος, η εξισωτική λογική και οι αλγεβρικές προ-
διαγραφές δίνουν ένα βασικό πλαίσιο αναφοράς τόσο στην αυτόματη απόδειξη θεω-
ρημάτων (automated theorem proving), όσο και στην τεχνολογία λογισμικού και
2
ειδικότερα στις τυπικές μεθόδους (formal methods). Η καθολική άλγεβρα (universal
algebra) και η θεωρία κατηγοριών (category theory) μπορούν να χρησιμοποιηθούν
για να εκφράσουν με μαθηματικό τρόπο τη σημασιολογία των προγραμμάτων και των
προδιαγραφών (specifications) συστημάτων.
Ο λ−λογισμός και η θεωρία κατηγοριών (με την εκδοχή της στη θεωρία της
πληροφορικής) γεννήθηκαν και αναπτύχθηκαν μέσα από την κριτική ενασχόληση των
μαθηματικών με τα θεμέλια της επιστήμης τους. Και τα δύο έχουν ως αφετηρία την
έννοια της συνάρτησης· ο μεν λ−λογισμός τη συνάρτηση νοούμενη ως κανόνα υπ-
ολογισμού, η δε θεωρία κατηγοριών αφηρημένη, αποδεσμευμένη από κάθε ιδιαίτερη
ιδιότητα και έννοια αλγεβρικού μετασχηματισμού. Η αρχική τους φιλοδοξία ήταν να
δημιουργήσουν ένα γενικό πλαίσιο μέσα στο οποίο θα θεμελιώνονταν τα μαθηματικά,
αντικαθιστώντας κατά κάποιο τρόπο την κυρίαρχη θεμελιωτική θεωρία, τη θεωρία
συνόλων. Μπορεί να μην πέτυχαν τον αρχικό τους στόχο, αλλά δημιούργησαν ένα
πλαίσιο στο οποίο μπορούν να εκφρασθούν και να αναπτυχθούν όλες οι κύριες έν-
νοιες (εκτασιακά και δομικά) του υπολογισμού. Του λ−λογισμού προϋπήρξε η θεωρία
της συνδυαστικής λογικής του Schonfikel, η οποία βασίζεται στην ιδέα της απάλειψης
των μεταβλητών στις συντακτικές αναπαραστάσεις των συναρτήσεων. Ο λογισμός
αυτός βασίζεται σε ορισμένους συνδυαστές και η μόνη πράξη που προβλέπεται είναι
η εφαρμογή. Ο Church, εκτός της εφαρμογής, εισήγαγε και την αφαίρεση την οποία
συμβόλισε με λάμδα, εξ΄ ού και το όνομα λ−λογισμός. Δημιούργησε έτσι ένα λογισμό,
πολύ απλό στον ορισμό και τη γραφή του, ο οποίος αποδείχτηκε, με τη συνεισφορά
πολύ μεγάλων μαθηματικών όπως οι Kleene, Rosser, Turing που υπήρξαν μαθητές
του Church, ότι είχε αναπάντεχες εκφραστικές ικανότητες. Πολύ γρήγορα ο λο-
γισμός αυτός θεωρήθηκε ως το προνομιακό πλαίσιο χαρακτηρισμού της έννοιας του
υπολογισμού και αποδείχτηκε το πρώτο θεώρημα αναποκρισιμότητας που αφορούσε
την εντασιακή ισοδυναμία δύο συναρτήσεων. Με τη μετάφραση του προβλήματος στο
λ−λογισμό απαντήθηκε αρνητικά και το Entscheidungsproblem του Hilbert.
Ο λ−λογισμός μετά την πρώτη του εντυπωσιακή ανάπτυξη έπεσε σε μία σχετική
αφάνεια, ώσπου ξαναήλθε δυναμικά στο προσκήνιο, αφενός με την εύρεση ικανοποι-
ητικής σημασιολογίας (αρχικά τα μοντέλα του Scott) και αφετέρου με τη χρήση του
στην ανάπτυξη γλωσσών προγραμματισμού. Η πρώτη γλώσσα που εμπνεύστηκε από
τον λ−λογισμό ήταν η Lisp. Αυτό συνέβαλε στην ανάπτυξη ολόκληρου πεδίου στη
θεωρία των γλωσσών προγραμματισμού, τον συναρτησιακό προγραμματισμό. ΄Εκτοτε
η ανάπτυξη του λ−λογισμού έγινε παράλληλα και αδιάσπαστα με την εξέλιξη συναφών
περιοχών της πληροφορικής. Θεωρείται απο τις βασικές γνώσεις που ένας (τουλάχισ-
τον θεωρητικός) πληροφορικής πρέπει να αποκτήσει και διδάσκεται στα περισσότερα
τμήματα πληροφορικής και μαθηματικών παγκοσμίως.
Σε αυτό το βιβλίο θα παρουσιάσουμε κάποιες βασικές πλευρές του λ−λογισμού
οι οποίες μπορούν να θεωρηθούν ως οι απαραίτητες βασικές γνώσεις για περαιτέρω
3
μελέτη. Θα παρουσιάσουμε επίσης μια σχετικά πρόσφατη ανακάλυψη, τον ισομορφισμό
Curry-Howard, ο οποίος δημιουργεί ένα καινούργιο μοντέλο προγραμματισμού με τη
βοήθεια της λογικής και των μαθηματικών αποδείξεων (πρωτόκολλο Curry-Howard).
4
ΕΥΧΑΡΙΣΤΙΕΣ
Ευχαριστούμε την Μαρία Δημαρόγκωνα και τον Νίκο Τριανταφύλλου χωρίς την
σημαντική βοήθεια τους δεν θα είχε ολοκληρωθεί το παρόν βιβλίο.
5
ΛΟΓΙΚΗ ΚΑΙ ΣΥΝΑΡΤΗΣΙΑΚΟΣ
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ
ΠΡΟΚΑΤΑΡΚΤΙΚΑ
Για τον Euler η συνάρτηση δίνεται από μία «φόρμουλα» η οποία επιτρέπει ή όχι
2
τον υπολογισμό της, π.χ. οι φόρμουλες ή μαθηματικοί τύποι
1
x2 , p , 1 + x + · · · + xn + · · ·
{1 − x2 }
θεωρούνται συναρτήσεις μιας μεταβλητής x. Το πεδίο ορισμού δεν προσδιορίζεται
εκ των προτέρων. Οι φόρμουλες αυτές είναι μάλλον μια «απόπειρα» υπολογισμού
2Θα χρησιμοποιούμε τον όρο «φόρμουλα» γι΄ αυτό που συνήθως ονομάζουμε «μαθηματικό τύπο»,
επειδή τον όρο «τύπο» θα τον χρησιμοποιήσουμε για την αντίστοιχη έννοια της πληροφορικής.
6
της συνάρτησης, απόπειρα που μπορεί και να μην καταλήγει σε αποτέλεσμα. Για
1
παράδειγμα, η φόρμουλα 1+x+· · ·+xn +· · · αναπαριστά την συνάρτηση 1−x ακόμα και
στην περίπτωση που |x| > 1, οπότε η ως άνω σειρά δεν συγκλίνει. Η αντίληψη αυτή για
τη συνάρτηση, αντίληψη πηγαία και διασθητικά ισχυρή, στάθηκε αδύνατο να αποτελέ-
σει το αντικείμενο ακριβών λογικομαθηματικών ορισμών. Η συνάρτηση είναι συνδ-
εδεμένη με τη μαθηματική φόρμουλα που την εκφράζει και κάθε αντιμετώπιση γίνεται
για την κάθε περίπτωση ξεχωριστά· φαίνεται δύσκολο να ασχοληθούμε με γενικές
ιδιότητες ολόκληρων κλάσεων από συναρτήσεις. Δεν στάθηκε δυνατό ποτέ να δοθεί
ένας ακριβής ορισμός των συναρτήσεων κατά Euler. Η έννοια αυτή εγκαταλείφτηκε,
εδώ και πολύ καιρό, προς όφελος της έννοιας της συνάρτησης που εισήγαγε ο Rie-
mann.
Με τον Riemann έχουμε μια ριζική μετατόπιση της αντίληψης για τη συνάρτηση,
σε κατευθύνσεις που σήμερα θα ονομάζαμε λογικομαθηματικές-αξιωματικές. Κάθε
ιδέα υπολογισμού εξαφανίζεται· μια συνάρτηση π.χ. από το R (σύνολο πραγματικών
αριθμών) στο R είναι ένα «μαύρο κουτί», δηλαδή ένα απροσδιόριστο αντικείμενο (εδώ
η φόρμουλα που την υπολογίζει εξαφανίζεται), για το οποίο το μόνο που ξέρουμε είναι
ότι αν δώσουμε έναν πραγματικό αριθμό θα μας επιστρέψει επίσης έναν πραγματικό
αριθμό. Επιπλέον, δεν μας επιτρέπεται να μελετήσουμε την έννοια της συνάρτησης
παρά μόνο με βάση αυτή την ιδιότητα. Η μετατόπιση αυτή της αντίληψης για τη
συνάρτηση επιτρέπει να αποδεικνύουμε ιδιότητες που αφορούν κλάσεις συναρτήσεων
και όχι μόνο μεμονωμένες συναρτήσεις, όπως στην περίπτωση του Euler. ΄Η ακόμη να
αποδεικνύουμε και αρνητικές ιδιότητες π.χ. ποιές συναρτήσεις στο R είναι συνεχείς ή
ποιές δεν είναι παραγωγίσιμες. Η ουσία της απομάκρυνσης από την αντίληψη του Eu-
ler είναι ότι η καινούργια έννοια είναι επιδεκτή μιας λογικομαθηματικής ανάλυσης με
ολοένα και μεγαλύτερους βαθμούς μαθηματικής αυστηρότητας. Η καινούργια αντίλ-
ηψη επιτρέπει τον ακριβή ορισμό του πότε μια συνάρτηση είναι συνεχής, παραγωγίσιμη,
αναλυτική κ.λ.π. Μέσω της αυστηρότητας τα μαθηματικά αναπτύσσονται, γενικεύον-
ται, αποκτούν υπόσταση. Εμφανίζονται περιοχές που θα ήταν αδύνατο να τις φαντασ-
τούμε διαφορετικά. ΄Οπως για παράδειγμα η θεωρία των αναλυτικών συναρτήσεων αλλά
και επεκτάσεις της έννοιας της συνάρτησης, όπως η θεωρία μέτρου, οι κατανομές, οι
χώροι Hilbert και ποικίλοι χώροι συναρτήσεων...
΄Εκταση και ΄Ενταση. Πότε είναι δύο συναρτήσεις ίδιες; Π.χ. είναι οι
συναρτήσεις f (x) = 2 ∗ x και g(x) = x + x (όπου x αριθμός) ίδιες;
Η άμεση (συνολοθεωρητική) απάντηση είναι ότι δύο συναρτήσεις f και g είναι ίδιες
όταν έχουν το ίδιο πεδίο ορισμού και όταν για κάθε x που ανήκει σ΄ αυτό το (f x) είναι
ίδιο με το (gx). Αυτή η άποψη είναι η άποψη της ισότητας των συναρτήσεων ως προς
την έκταση. Σύμφωνα με την άποψη αυτή (συνολοθεωρητική άποψη) η συνάρτηση
είναι ένα σύνολο (η έκταση της συνάρτησης) με στοιχεία διατεταγμένα ζεύγη της
μορφής hx, yi, όπου x είναι όρισμα της συνάρτησης και y η τιμή της σ΄ αυτό το όρισμα.
Οπότε δύο συναρτήσεις ταυτίζονται όταν ταυτίζονται ως σύνολα, δηλαδή όταν έχουν
τα ίδια στοιχεία.
΄Ομως, είναι δυνατόν να θεωρήσουμε ότι δύο συναρτήσεις f και g μπορεί να εί-
ναι ίδιες ως προς την έκταση άλλα να μην είναι ίδιες όσον αφορά τον τρόπο με τον
οποίο υπολογίζουν τις τιμές τους. Υπό αυτή τη θεώρηση οι συναρτήσεις νοούνται ως
συναρτήσεις ως προς την ένταση. Π.χ. οι συναρτήσεις f (x) = 2 ∗ x και g(x) = x + x
ενώ είναι ίδιες ως προς την έκταση δεν μπορούν να θεωρηθούν ίδιες ως προς την
ένταση, μια και ο τρόπος που υπολογίζονται οι τιμές τους είναι διαφορετικός.
3Αν f η συνάρτηση και x ένα όρισμά της, γράφουμε ως (f x) την τιμή της συνάρτησης γι΄ αυτό το
όρισμα.
8
Θα πρέπει στα διάφορα (υπολογιστικά) πλαίσια και με διάφορα κριτήρια να απο-
φασίζουμε πότε δύο συναρτήσεις είναι ίδιες ως προς την ένταση (ισότητα ως προς την
ένταση).
λx.x2 + 1
Ορισμός. Το σύνολο Λ των λ-όρων είναι το σύνολο των εκφράσεων που σχη-
ματίζεται ξεκινώντας από ένα άπειρο σύνολο μεταβλητών V = {v, v 0 , v 00 , . . .} (αρι-
θμήσιμο σύνολο) με τη χρήση των τελεστών της εφαρμογής και της λ-αφαίρεσης. Ο
γενικευμένος ορισμός είναι ο εξής:
10
(1) x∈V ⇒ x∈Λ
(2) M, N ∈ Λ ⇒ (M N ) ∈ Λ
(3) M ∈ Λ, x ∈ V ⇒ (λx. M ) ∈ Λ
ή χρησιμοποιώντας αφηρημένη σύνταξη μπορούμε να γράψουμε:
V v |V0
Λ V | (Λ Λ) | (λV. Λ)
Κάθε όρος της μορφής (M N ) θα λέγεται εφαρμογή (του M στο N ) ενώ κάθε
όρος της μορφής (λx.M ) θα λέγεται λ-αφαίρεση (στο x). Για το κατ΄ αρχήν νόημα
αυτών των παραστάσεων ισχύουν οι παρατηρήσεις που διατυπώθηκαν παραπάνω για
τις πράξεις της εφαρμογής και της αφαίρεσης.
11
Παράδειγμα. Οι όροι του [αδείγματος]εξ:λαμβδα-τερμς γράφονται με βάση τις
παραπάνω συνθήκες:
v
v v 00
λv. v v 00
(λv. v v 00 ) v 0
(λv 0 . (λv. v v 00 ) v 0 )v 000
Σχόλιο. Ο τρόπος με τον οποίο έχουν οριστεί οι λ-όροι δίνει μοναδική αναγν-
ωσιμότητα, δηλαδή κάθε όρος t είναι ένα και μόνον ένα από τα ακόλουθα:
(1) μια μεταβλητή (t = x για κάποιο x),
(2) μια εφαρμογή, όπου υπάρχουν μοναδικά M και N ώστε t = (M N ),
(3) μια λ−αφαίρεση, όπου υπάρχουν μοναδικά x και N ώστε t = (λx.N ).
Για τη γραφή των όρων θα προτιμούμε τις απλουστεύσεις που περιγράψαμε παρα-
πάνω αλλά και επιπλέον κάθε γραφή που θα υποδεικνύεται από την απλότητα ή από
τη σαφήνεια και η οποία δε θα οδηγεί σε λάθος ανάγνωση του όρου. Σε πολλές
περιπτώσεις, αντί του σωστού (λx.M ) θα γράφουμε λxM .
(λx.x) a = a = (λy.y) a
(λx.x) z ≡ (λy.y) z
(λx.x) z ≡ (λx.x) z
(λx.x) z 6≡ (λx.y) z
FV (x) = {x}
FV (M N ) = FV (M ) ∪ FV (N )
FV (λx.M ) = FV (M ) − {x}
• x [xN ] ≡ N
• y [xN ] ≡ y
• (P Q) [xN ] ≡ (P [xN ]) (Q [xN ])
• (λy.P ) [xN ] ≡ λy. (P [xN ])
• (λx.P ) [xN ] ≡ λx.P
Παρατηρήσεις:
ωJ ≡ (λx.xx)(λyz.yz)
=β (λyz.yz)(λyz.yz)
=β λz.(λyz.yz)z
≡ λz.(λyz 0 .yz 0 )z
=β λzz 0 .zz 0
≡ λyz.yz
≡ J
17
Αναγωγή. Παρακάτω δίνεται ο ορισμός για τη σχέση της αναγωγής στους
λ-όρους.
(λx.P )Q →β P [xQ]
P →β P 0 =⇒ ∀x ∈ V : λx.P →β λx.P 0
P →β P 0 =⇒ ∀Z ∈ Λ : P Z →β P 0 Z
P →β P 0 =⇒ ∀Z ∈ Λ : ZP →β ZP 0
Σημείωση: Αν στη θέση της σχέσης →β βάλουμε μια οποιαδήποτε διμελή σχέση
R στο Λ τότε αν η R ικανοποιεί τις παραπάνω ιδιότητες θα λέμε ότι η R περνάει στα
συμφραζόμενα.
΄Ενας όρος της μορφής (λx.P )Q ονομάζεται β − redex και ο P [xQ] ονομάζεται
το β − contractum του.
΄Ενας όρος M είναι μία β−κανονική μορφή εάν δεν υπάρχει όρος N ώστε M →β
N.
Προοφ. ΄Εστω red η σχέση μεταξύ δύο λ-όρων που ορίζεται από το δεύτερο
σκέλος της ισοδυναμίας. Ειναι εύκολο να δείξουμε ότι η σχέση red ικανοποιεί τις
ιδιότητες της →β . Οπότε ισχύει →β ⊆ red, επειδή →β είναι η μικρότερη τέτοια
σχέση. ΄Εστω τώρα M redN . Τότε υπάρχει υποόρος t του M της μορφής redex και
t0 του N ώστε ο N προέκυψε από τον M με την αντικατάσταση του t με το t0 , που
είναι το contractum του t. Αλλά φανερά έχουμε t →β t0 . Και επειδή η δημιουργία
του όρου M (μαζί και του N ) ακολουθεί τους κανόνες για τους οποίους είναι κλειστή
18
η →β , τελικά θα έχουμε και M →β N 4. Οπότε red ⊆→β , οπότε οι δύο σχέσεις
ταυτίζονται.
Πόρισμα. Ο όρος M είναι β-κανονική μορφή τότε και μόνον εάν δεν περιέχει (ως
υποόρο) κανένα redex.
Προοφ. ΄Εστω R η σχέση που ορίζεται στο Λ μέσω του δεύτερου σκέλους της
ισοδυναμίας. Είναι προφανές ότι η R είναι αυτοπαθής, μεταβατική και περιέχει τη
σχέση →β . Οπότε β ⊆ R. ΄Εστω τώρα M RN . Εάν M ≡ N τότε Mβ N , διότι η β
είναι αυτοπαθής. Διαφορετικά, υπάρχουν M →β M2 →β · · · →β Mn−1 →β N . Αλλά
τότε Mβ M2β · · ·β Mn−1 β N και λόγω της μεταβατικότητας της β παίρνουμε Mβ N .
Οπότε R ⊆ β .
Η αναγωγή ενός όρου είναι ο «υπολογισμός» του. ΄Οταν στον όρο M υπάρχει ένα
redex τότε «υπολογίζουμε» το redex αντικαθιστώντας το με το contractum του. Η
μετάβαση δηλαδή από τον M στον N (Mβ N ) είναι μία διαδικασία υπολογισμού που
μας οδηγεί από τον M στον N . Ο λ-λογισμός με την πράξη της β-αναγωγής εκφράζει
απόλυτα, στο μαθηματικό επίπεδο, αυτό που γίνεται σε έναν υπολογιστή. Η μνήμη του
υπολογιστή χωρίζεται σε μικρά κελλιά ή θέσεις μνήμης. Κάθε κελλί μνήμης περιέχει
μια λέξη,5 και κάθε κελλί έχει επίσης έναν αριθμό που είναι η διεύθυνσή του. Το
κάθε κελλί λοιπόν έχει μια σταθερή διεύθυνση και ένα μεταβλητό περιεχόμενο. Το
19
περιεχόμενο ενός κελλιού a μπορεί να είναι και η διεύθυνση ενός κελλιού b. Λέμε τότε
ότι το κελλί της μνήμης a είναι ένας δείκτης στο b.
Ας θεωρήσουμε τώρα ένα πρόγραμμα. Θα το συμβολίζουμε P (x) για να δείξ-
ουμε ότι ενεργεί σε μια μεταβλητή x η οποία δεν είναι τίποτε άλλο παρά ένα κελλί
μνήμης (οι μεταβλητές εκπροσωπούν κελλιά μνήμης). Το πρόγραμμα αυτό καλύπτει
ένα μεγάλο μέρος της μνήμης, δηλαδή μια μεγάλη ακολουθία από κελλιά μνήμης. Εάν
το πρόγραμμα αυτό πρόκειται να γίνει όρισμα ενός άλλου προγράμματος Q(y) θα πρέπει
να μπορούμε να το δηλώσουμε με μια ποσότητα που αντιστοιχεί σε ένα μόνο κελλί
μνήμης, δηλαδή με μία διεύθυνση (θα μπορούσε π.χ. να είναι η διεύθυνση του αρ-
χικού κελλιού της ζώνης της μνήμης που καταλαμβάνει το πρόγραμμα P (x)). Αυτήν
την διεύθυνση την ονομάζουμε λxP (x), δηλαδή είναι «η διεύθυνση του προγράμματος
P (x) που εξαρτάται από τη μεταβλητή x». Αυτή ακριβώς η λειτουργία μέσα στον υπολ-
ογιστή δηλώνεται με τη λ-αφαίρεση στο λ-λογισμό. Μπορούμε τώρα να βάλουμε αυτή
τη διεύθυνση στο κελλί μνήμης y η οποία πια γίνεται ένας δείκτης για το πρόγραμμα
P (x). Δεν μένει τώρα παρά να ενεργοποιήσουμε το πρόγραμμα Q(y).
Τι γίνεται τώρα με την πράξη της αναγωγής; Για την αναγωγή έχουμε τον όρο
(λxP (x))t ο οποίος μετασχηματίζεται στον P [x := t]. Ποιά είναι η αντίστοιχη διερ-
γασία στον υπολογιστή; Για να εφαρμόσουμε το πρόγραμμα με διεύθυνση λxP (x)
στο πρόγραμμα (όρισμα) με διεύθυνση t, θέτουμε στο κελλί μνήμης x τη διεύθυνση t
(μετασχηματίζουμε το x σε δείκτη στο t) και εκτελούμε το πρόγραμμα P .
Αφού ο λ-λογισμός αναπαριστά αυτό που γίνεται σε μια υπολογιστική μηχανή δεν
είναι καθόλου παράξενο το ότι μπορεί να αναπαραστήσει όλες τις συναρτήσεις που
μπορούμε να θεωρήσουμε υπολογίσιμες. Αυτό θα το δούμε λίγο αργότερα.
Ας εξετάσουμε τώρα το θέμα της ισότητας μεταξύ δύο όρων. Μπορούμε να θεω-
ρήσουμε ότι δύο όροι είναι «ίσοι» εάν έχουν προκύψει και οι δύο από διαδικασία
εκτέλεσης υπολογισμών με την ίδια αφετηρία. Αυτή η έννοια γενικεύεται και στην
περίπτωση της αναγωγής β δίνει τη β-ισότητα.
ΤΟ ΘΕΩΡΗΜΑ CHURCH–ROSSER
Κάθε όρος M μπορεί να περιέχει αρκετά (περισσότερα του ενός) β-redex, π.χ. ο
όρος
redex
z }| {
K (I I) = λy. λx. y ((λz. z) λw. w)
| {z }
redex
Μπορούμε να έχουμε K (I I) →β λx. (I I), αλλά και K (I I) →β K I.
Οπότε με αφετηρία έναν όρο M μπορούμε να έχουμε διαφορετικά «μονοπάτια
υπολογισμού» Mβ M1 και Mβ M2 . Πώς σχετίζονται οι όροι M1 και M2 · Το θεώρημα
Church–Rosser λέει πως σε αυτή την περίπτωση υπάρχει πάντοτε ένας (κοινός) όρος
M3 , στον οποίο οι M1 και M2 μπορούν να συγκλίνουν, δηλαδή M1β M3 και M2β M3 .
Θεώρημα. [Church–Rosser]
Εάν Mβ M1 και Mβ M2 , τότε υπάρχει M3 ώστε M1β M3 και M2β M3 .
Πόρισμα. Κάθε όρος μπορεί να έχει (αν έχει) μόνον μία κανονική μορφή.
Σχόλιο. Δεν έχουν όλοι οι όροι κανονικές μορφές, π.χ. ο όρος Ω. Αν όμως υπ-
άρχει, τότε θα είναι μοναδική. Αν φανταστούμε μία διαδικασία υπολογισμού (αναγωγή)
της κανονικής μορφής τότε το θεώρημα Church–Rosser εξασφαλίζει ότι η κανονική
μορφή που υπολογίζεται είναι ανεξάρτητη από τον τρόπο υπολογισμού. Το φαινό-
μενο είναι ανάλογο με τον υπολογισμό αριθμητικών-αλγεβρικών εκφράσεων στα μα-
θηματικά. Π.χ. όταν υπολογίζουμε την έκφραση (5 + 3) ∗ (4 + 7) ∗ (11 + 3) το
αποτέλεσμα θα είναι ανεξάρτητο από τη σειρά και από τον τρόπο που θα επιλέξουμε
να την υπολογίσουμε.
23
c0 ≡ λf. λx. x
c1 ≡ λf. λx. f x
c2 ≡ λf. λx. f (f x)
1. A+ ≡ λxypq. x p (y p q)
2. A∗ ≡ λxyz. x (y z)
3. Aexp ≡ λxy. y x
΄Εχουμε λοιπόν:
(1) Για το A+ :
A+ cn cm =β λp. λq. cn p (cm p q)
=β λp. λq. (λx. pn (x)) pm (q)
=β λp. λq. pn (pm (q))
=β λp. λq. pn+m (q)
≡ cn+m
(2) Για το A∗ :
Δηλαδή στον όρο «if B then P else Q» εάν το B υπολογιστεί να είναι true
«επιστρέφεται» το P , αν το B υπολογιστεί να είναι false «επιστρέφεται» το Q.
Ορισμός. Ορίζουμε
25
[P , Q] ≡ λx. x P Q
π1 ≡ λx. λy. x ≡ true (πρώτη προβολή)
π2 ≡ λx. λy. y ≡ false (δεύτερη προβολή)
Τότε έχουμε ότι
[P , Q] π1 =β P
[P , Q] π2 =β Q
΄Οντως,
[P , Q] π1 ≡ (λx. x P Q) (λx. λy. x)
=β (λx. λy. x) P Q
=β (λy. P ) Q
=β P
΄Ομοίως για τη δεύτερη προβολή.
Ορισμός. Ορίζουμε
(i) Αριθμητική συνάρτηση είναι μια συνάρτηση
f : Nm → N
(ii) Μία αριθμητική συνάρτηση f : Nm → N (m μεταβλητών) είναι λ-ορίσιμη ή
λ-αναπαραστάσιμη εάν υπάρχει όρος F ∈ Λ έτσι ώστε
F cn1 cn2 · · · cnm =β cf (n1 ,n2 ,...nm )
για όλα τα n1 , n2 , . . . nm ∈ N.Λέμε τότε ότι ο F ορίζει ή αναπαριστά
(στο λ-λογισμό) την συνάρτηση f
Σχόλιο. Εάν F cn1 cn2 · · · cnm =β cf (n1 ,n2 ,...nm ) και επειδή cf (n1 ,n2 ,...nm ) είναι
σε κανονική μορφή, από το θεώρημα Church–Rosser θα έχουμε ότι F cn1 cn2 · · · cnm β cf (n1 ,n2 ,...nm )
27
f (0, n1 , . . . nm ) = g(n1 , . . . nm )
f (n + 1, n1 , . . . nm ) = h(f (n, n1 , . . . nm ), n, n1 , . . . nm )
Η ιδέα είναι να παραστήσουμε με διατεταγμένα ζεύγη τα ζεύγη [n, f (n)], όπου
f (n) η τιμή της συνάρτησης στο όρισμα n. Για να το πετύχουμε αυτό θα πρέπει να
αρχίσουμε από το ζεύγος [0, g(n1 , . . . nm )] και να επαναλάβουμε n φορές έναν τελεστή
next που θα έχει την ιδιότητα
28
Πριν προχωρήσουμε στο να αποδείξουμε ότι το σχήμα της ελαχιστοποίησης μπορεί
να οριστεί στο λ-λογισμό, θα δούμε πρώτα πώς μπορεί να εκφραστεί γενικότερα η
αναδρομή στο λ-λογισμό.
Προοφ. Πρέπει
F =β M [f := F ] =β (λf. M ) F
F ≡ Y (λf. M )
Προοφ. ΄Εστω g : Nm+1 → N λ-ορίσιμη από τον G ∈ Λ και έστω ότι για όλα τα
n1 , . . . nm υπάρχει n ώστε g(n, n1 , . . . nm ) = 0. Θέλουμε να ορίσουμε στον λ-λογισμό
την
Ορίζουμε μία συνάρτηση zero που ελέγχει αν ένα αριθμητικό όρισμα είναι 0 ή όχι
Τότε
zero c0 =β true
zero cn+1 =β false
Από το θεώρημα του σταθερού σημείου υπάρχει όρος H που ικανοποιεί την ως
άνω εξίσωση. Ορίζουμε F ≡ λx1 · · · xn . H c x1 · · · xn , οπότε
Ορισμός. ΄Εστω A ⊆ Λ.
(1) A είναι κλειστό για το =β αν
M ∈ A, M =β N ⇒ N ∈ A
(2) A είναι μη-τετριμμένο αν A =
6 ∅ και A =
6 Λ
(3) A είναι αναδρομικό αν το σύνολο #A = {#M |M ∈ A} είναι αναδρομικό 8
31
Προοφ. Ορίζουμε B = {M |M pMq ∈ A}. Εάν A είναι αναδρομικό τότε και B
είναι αναδρομικό (γιατί·). Οπότε είναι αναπαραστάσιμο στο λ-λογισμό δηλαδή υπάρχει
F ∈ Λ ώστε
M ∈B ⇔ F pMq =β c0
M 6∈ B ⇔ F pMq =β c1
M ∈B ⇔ G pMq =β M1 6∈ A
M 6∈ B ⇔ G pMq =β M0 ∈ A
[π.χ. παίρνουμε G x ≡ if zero (F x) then M1 else M0 ]
G∈B ⇔ GpGq =β M1 ⇒ GpGq 6∈ A ⇒ G 6∈ B
p q p q
G 6∈ B ⇔ G G =β M0 ⇒ GG ∈ A ⇒ G∈B
Πόρισμα. [Church]
Το σύνολο {M ∈ Λ|M =β true} δεν είναι αναδρομικό.
32
*ΑΣΚΗΣΕΙΣ
(2) Μονοπάτι αναγωγής από τον όρο M είναι κάθε πεπερασμένη ή άπειρη ακολου-
θία της μορφής
M →β M1 →β M2 →β · · ·
και έστω
$ =?????????????????????????
Αποδείξτε ότι ο $ είναι συνδυαστής σταθερού σημείου δηλ. ότι
$F =β F ($F )
για κάθε F ∈ Λ.
(5) Χρησιμοποιείστε την ίδια τεχνική με την απόδειξη ότι το σχήμα της πρω-
τογενούς αναδρομής είναι αναπαραστάσιμο στο λ−λογισμό για να ορίσετε λ−όρο P
33
(predecessor) ώστε
P cn+1 =β cn
34
ΘΕΩΡΙΑ ΤΥΠΩΝ
τον καθαρό λ-λογισμό θεωρήσαμε ότι μία συνάρτηση δεν έχει προκαθορισμένο
πεδίο ορισμού και πεδίο τιμών. Δεν υπάρχουν απαιτήσεις προκαθορισμένου προσ-
διορισμού ότι π.χ. μία συνάρτηση (όπως η n 7→ n3 ) δέχεται ως ορίσματα φυσικούς
αριθμούς και επιστρέφει φυσικούς αριθμούς. Η επιβολή τέτοιου είδους απαιτήσεων
γίνεται μέσω των τύπων. Ο κάθε όρος (πρόγραμμα) συνοδεύεται από ένα τύπο, ο
οποίος μπορεί να θεωρηθεί ως ένας προσδιορισμός ή σχόλιο (specification) για το τι
κάνει ένα πρόγραμμα. Ο Curry και ο Church εισήγαγαν τέτοιες εκδοχές λ-λογισμού
με τύπους.
T U | (T → T )
{x1 : t1 , . . . , xn : tn }
όπου x1 , . . . xn ∈ Λ δηλαδή είναι μεταβλητές-όροι του λ-λογισμού και t1 , . . . , tn
τύποι.
Θα πρέπει xi 6= xj για i 6= j, δηλαδή δεν μπορεί να έχουμε αντιστοιχήσει στην
ίδια μεταβλητή δύο διαφορετικούς τύπους. Εάν Γ = {x1 : t1 , . . . , xn : tn }, τότε
dom(F) = {x1 , . . . , xn }. Το dom(F) είναι το πεδίο του Γ. Κάθε περιβάλλον Γ
μπορεί να θεωρηθεί ως μία απονομή ενός τύπου σε κάθε μεταβλητή του πεδίου του
35
(αν x : τ ∈ Γ τότε ο τύπος t απονέμεται στη μεταβλητή x). Συνήθως γράφουμε
x1 : t1 , . . . xn : tn αντί του {x1 : t1 , . . . xn : tn } και Γ, x : τ αντί του Γ ∪ {x : τ }. Στην
τελευταία περίπτωση, προϋπόθεση για να γράψουμε αυτό είναι ότι x : τ 6∈ Γ, δηλαδή
η μεταβλητή x δεν έχει απονομή στο Γ.
Κανόνες Τυποποίησης: Ορίζουμε τη σχέση Γ ` M : σ, όπου Γ περιβάλλον, M
λ-όρος και σ τύπος, ορίζοντας επαγωγικά τα αξιώματα και τους κανόνες απαγωγής.
Αξίωμα: Γ, x : τ ` x : τ
x:σ`x:σ
` λx. x : σ → σ διότι υπάρχει η απαγωγή
` λx. x : σ → σ
x : σ, y : τ ` x : σ
` λx y. x : σ → (τ → σ) διότι x : σ ` λy. x : τ → σ
` λx y. x : σ → (τ → σ)
΄Εστω M λ-όρος. Εάν υπάρχουν Γ και σ ώστε Γ ` M : σ τότε ο M λέγεται
τυποποιήσιμος.
Οι τύποι που αποδίδονται σε κάποιο όρο εξαρτώνται από τη μορφή του όρου,
σύμφωνα με το παρακάτω λήμμα.
[Λήμμα Δημιουργίας]
Ισχύουν τα παρακάτω:
(1) Γ ` x : σ ⇒ x : σ ∈ Γ
(2) Γ ` M N : σ ⇒ Υπάρχει τύπος τ ώστε Γ ` M : τ → σ και Γ ` N : τ .
(3) Γ ` λx. M : σ ⇒ Υπάρχουν τύποι τ και ρ ώστε Γ, x : τ ` M : ρ και
σ = τ → ρ.
Περίπτωση:
37
Γ, x : τ, y : σ1 ` P : σ2
Γ, x : τ ` λy. P : σ1 → σ2
Προοφ. Από το θεώρημα Church–Rosser για το λ-λογισμό και την ιδιότητα Sub-
ject Expansion.
Σχόλιο. ΄Οσον αφορά την α-ισοδυναμία θα ισχύουν τα ίδια με την περίπτωση του
λ-λογισμού. ΄Οταν αλλάζουμε το όνομα μιας δεσμευμένης μεταβλητής xσ αλλάζουμε
μόνο το σύμβολο x σε y και διατηρούμε τον ίδιο τύπο σ. Δηλαδή το λxσ . M μετα-
τρέπεται σε λy σ . M [xσ := y σ ], όπου y είναι σύμβολο μεταβλητής για τον τύπο σ
(y ∈ Vσ ). Η αντικατάσταση ορίζεται επίσης με τον ίδιο τρόπο αλλά με την προϋπό-
θεση ότι μία (ελεύθερη) μεταβλητή τύπου σ αντικαθίσταται μόνο από όρο τύπου σ.
Δηλαδή ορίζεται μόνο το M [xσ := N ] όπου N ∈ σ, ως εξής:
(1) xσ [xσ := N ] ≡ N
(2) y τ [xσ := N ] ≡ y τ , αν xσ 6≡ y τ
(3) (P Q)[xσ := N ] ≡ (P [xσ := N ]) (Q[xσ := N ])
(4) (λxσ . P )[xσ := N ] ≡ λxσ . P
(5) (λy τ . P )[xσ := N ] ≡ λy τ . P [xσ := N ], αν xσ 6≡ y τ
΄Ενα redex έχει τη μορφή (λxσ . M ) N , όπου βέβαια ο λxσ . M έχει τύπο σ →
τ (M ∈ τ ) και N ∈ σ (αναγκαστικά για να μπορέσει να σχηματιστεί ο όρος). Το
39
contractum θα είναι το M [xσ := N ]. Είναι προφανές ότι ο όρος που προκύπτει από
μία τέτοια αντικατάσταση έχει τον ίδιο τύπο με τον M .
΄Ενας όρος του αρχικού συστήματος Church είναι σαν ένας όρος του καθαρού
λ-λογισμού με τη διαφορά ότι σε όλες τις μεταβλητές, ελεύθερες και δεσμευμένες,
υπάρχει μία απονομή-αναγραφή τύπων. Αν «σβήσουμε» αυτές τις απονομές ο όρος
αυτός μετατρέπεται σε όρο του λ-λογισμού χωρίς τύπους.
C(x) = xT (x)
C(M N ) = C(M ) C(N )
C(λx. M ) = λxT (x) . C(M )
41
*Σύστημα Church
πορούμε να διαφοροποιήσουμε το αρχικό σύστημα Church και να το παρουσιά-
σουμε με τον τρόπο με τον οποίο τυποποιούνται οι λ-όροι στο σύστημα Curry. Θα
χρειαστούμε την έννοια του προόρου.
΄Εστω T το σύνολο των τύπων. Ορίζουμε ως προόρους τις εκφράσεις ΛT που
σχηματίζονται από τον ακόλουθο ορισμό:
ΛT V | (λx : T. ΛT ) | (ΛT ΛT )
Γ, x : σ `∗ x : σ
Γ, x : σ `∗ M : τ Γ `∗ M : σ → τ Γ `∗ N : σ
Γ `∗ λx : σ. M ; σ → τ Γ `∗ M N : τ
x : τ ∈ Γ → T (x) = τ
x1 : σ1 , . . . xk : σk `∗ M : ρ
[Δημιουργίας]
Ισχύουν τα ακόλουθα:
(1) Γ `∗ x : σ ⇒ x : σ ∈ Γ
(2) Γ `∗ M N : σ ⇒ υπάρχει τ ώστε Γ `∗ M : τ → σ και Γ `∗ N : τ
(3) Γ `∗ λx : τ. M : σ ⇒ υπάρχει ρ ώστε σ = τ → ρ και Γ, x : τ `∗ M : ρ
[Αντικατάσταση]
Ισχύουν τα ακόλουθα:
[Subject reduction]
Αν Γ `∗ M και M →β N τότε Γ `∗ N .
[Church–Rosser]
Αν Γ `∗ M : σ και Mβ M1 και Mβ M2 , τότε υπάρχει L ώστε M1β L και M2β L και
∗
Γ ` L : σ.
[Μοναδικότητα τυποποίησης]
Ισχύουν τα ακόλουθα:
(1) Γ `∗ M : σ και Γ `∗ M : τ ⇒ σ = τ
(2) Γ `∗ M : σ και Γ `∗ N : τ και M ≡ βN ⇒ σ = τ
Η σχέση των τυποποίησεων `∗ και ` θα είναι ανάλογη με αυτή μεταξύ των όρων
Church M και των Γ ` M : σ.
΄Εστω M, N ∈ ΛT .
(1) Αν M →β N , τότε |M | →β |N |.
(2) Γ `∗ M : σ ⇒ Γ ` |M | : σ
[΄Υψωση]
Για όλα τα M, N ∈ Λ (λ-όροι):
43
ΕΠΕΚΤΑΣΕΙΣ ΤΟΥ λ−ΛΟΓΙΣΜΟΥ ΜΕ ΑΠΛΟΥΣ ΤΥΠΟΥΣ
ο σύστημα του λ-λογισμού με απλούς τύπους που μελετήσαμε, και το οποίο μας
έδωσε τη δυνατότητα να αναπτύξουμε τη γενική μορφή των συστημάτων με τύπους,
είναι αρκετά «φτωχό». Δεν μπορούμε λόγου χάριν να ορίσουμε το ζεύγος hP, Qi
όταν μας δίνονται δύο όροι P και Q. Μια λοιπόν προφανής επέκταση θα είναι να
προσθέσουμε στο μηχανισμό δημιουργίας των τύπων τη δυνατότητα δημιουργίας του
γινομένου τύπων σ × τ , όταν σ και τ είναι τύποι. Αυτό θα μας επιτρέψει να ορίσουμε
το ζεύγος hP, Qi. Αργότερα θα μελετήσουμε επεκτάσεις που θα μας επιτρέπουν να
αυξήσουμε αξιοσημείωτα την εκφραστική δυνατότητα του συστήματος.
Οι επεκτάσεις που θα μελετήσουμε θα είναι στο αρχικό σύστημα Church.
• Αν M είναι όρος τύπου σ και N όρος τύπου τ τότε hM, N i είναι όρος τύπου
σ × τ . (Δημιουργία ζεύγους)
• Αν M είναι όρος τύπου σ × τ τότε π 1 M είναι όρος τύπου σ και π 2 M είναι
όρος τύπου τ .
π 1 hM, N i →β M
π 2 hM, N i →β N
Οι δύο προαναφερθείσες σχέσεις που έχουν τη μορφή P →β Q σημαίνουν ότι P
είναι ένα redex και Q είναι το contractum του.
Με προφανή τρόπο, ακριβώς όπως στην περίπτωση των απλών τύπων (και του
καθαρού λ-λογισμού) μπορούμε να επεκτείνουμε τη σχέση →β σε β καθώς και να
ορίσουμε τη σχέση =β . Παραμένουν οι ιδιότητες Church-Rosser καθώς και η ιδιότητα
της ισχυρής κανονικοποίησης.
Για παράδειγμα, disj (u, v)β T και conj (F, x)β x. Είναι εύκολο να δούμε ότι και
με τους υπόλοιπους συνδέσμους ικανοποιούνται οι επιθυμητές ιδιότητες.
Για να αναπαραστήσουμε συναρτήσεις πρέπει πρώτα να αναπαραστήσουμε τους
φυσικούς αριθμούς. Η φυσική επιλογή είναι ο όρος n = S n (O) να αναπαριστά τον
φυσικό αριθμό n ∈ N. (S n (O) είναι ο όρος S(S(· · · (S (O) · · · )).
| {z }
n φορές
Οι αναδρομικές συναρτήσεις δίνονται με ορισμούς του τύπου
x+0=x x + Sy = S(x + y)
Αυτοί οι ορισμοί μπορούν να μεταφερθούν στο σύστημα T χρησιμοποιώντας τον
τελεστή R. Θα δώσουμε το παράδειγμα για την πρόσθεση. Ορίζουμε
Τότε έχουμε
t[x, O]β [β]x και
t[x, Sy]β [β](λz Nat .λz 0Nat .Sz)(t[x, y])yβ [β]St[x, y]
46
πράγμα που σημαίνει ότι μπορούμε να θεωρήσουμε τον όρο t[x, y] ως ορισμό της
πρόσθεσης x + y.
AB
A∧B
A → (A ∧ B)
είναι δέντρο με φόρμουλες.
Τα δέντρα που εξετάζουμε διακλαδώνονται προς τα πάνω π.χ. όταν γράφουμε φ
ψ χ έχουμε διπλή διακλάδωση, ενώ όταν γράφουμε φ χ έχουμε μονή διακλάδωση.
΄Ενα δέντρο με φόρμουλες και με πακέτα υποθέσεων είναι ένα δέντρο με φόρμουλες
όπου στα φύλλα του δέντρου σε κάθε φόρμουλα έχει αντιστοιχηθεί ένας φυσικός αρ-
ιθμός. Ο περιορισμός είναι ότι σε διαφορετικές φόρμουλες πρέπει να αντιστοιχούν
διαφορετικοί αριθμοί ενώ σε διαφορετικές εμφανίσεις της ίδιας φόρμουλας (ίδια φόρ-
μουλα σε διαφορετικά φύλλα) μπορεί να αντιστοιχηθεί ο ίδιος αριθμός. Το πολυσύνολο
όλων των εμφανίσεων στα φύλλα του δέντρου μιας φόρμουλας φ στην οποία έχει αντι-
στοιχηθεί ο αριθμός i λέγεται πακέτο υποθέσεων i. Τα πακέτα υποθέσεων χωρίζονται
σε δύο ξεχωριστές κατηγορίες. Τα {ζωντανά} πακέτα υποθέσεων και τα εκφορτισμένα
πακέτα υποθέσεων. ΄Οταν θέλουμε να παρουσιάσουμε ότι μια συγκεκριμένη εμφάνιση
μιας φόρμουλας φ σε ένα φύλλο ανήκει στο ζωντανό πακέτο i γράφουμε φi ενώ όταν
ανήκει στο εκφορτισμένο πακέτο i γράφουμε iφ . Επίσης, στα δέντρα με φόρμουλες και
48
πακέτα υποθέσεων, επιτρέπουμε να υπάρχουν φυσικοί αριθμοί και στις διακλαδώσεις
φ ψ χ και φ χ δηλαδή επιτρέπουμε το δέντρο να έχει στους κόμβους τη μορφή
φψiχήφiχ.
Το παρακάτω είναι ένα δέντρο με φόρμουλες και πακέτα υποθέσεων
1 A 1 A A∧B 1 A → (A ∧ B) A2 (A → (A ∧ B)) ∧ A
Ας επισημάνουμε ότι το πολυσύνολο με μοναδική εμφάνιση την A2 στην ανα-
παράσταση του δέντρου είναι το ανοικτό πακέτο υποθέσεων 2 ενώ το πολυσύνολο με
τις δύο εμφανίσεις 1A στην αναπαράσταση του δέντρου είναι το εκφορτισμένο πακέτο
υποθέσεων 1.
Θα συμβολίζουμε τα ανοικτά πακέτα υποθέσεων i με μέλη κάποιες φόρμουλες φόρ-
μουλα φ με [φ]i . Δηλαδή [φ]i θα συγκεντρώνει όλες τις φόρμουλες φ στα φύλλα του
δέντρου στις οποίες έχει αντιστοιχηθεί ο αριθμός i (και οι οποίες συγκροτούν ανοικτό
πακέτο). Αντίστοιχα τα εκφορτισμένα πακέτα τα συμβολίζουμε με [φ]i . Σημειώστε
ότι [φ]i είναι διαφορετικό από το [φ]j αν i 6= j. Το ίδιο συμβαίνει και για τα εκφορ-
τισμένα πακέτα. Ενα πακέτο υποθέσεων είναι πάντα προσδιορισμένο είτε ως ανοικτό
είτε ως εκφορτισμένο πακέτο υποθέσεων. Αν αποφασίσουμε για ένα ανοικτό πακέτο
υποθέσεων [φ]i να αλλάξουμε τον προσδιορισμό του σε εκφορτισμένο τότε το συμ-
βολίζουμε (το μετατρέπουμε σε) [φ]i .
Στη συνέχεια θα ορίσουμε την «Π είναι απόδειξη της φόρμουλας φ από τα πακέτα
υποθέσεων [φ1 ]j1 , . . . , [φk ]jk ». Η απόδειξη Π θα είναι ένα δέντρο με φόρμουλες και
πακέτα υποθέσεων στο οποίο τα ανοικτά πακέτα υποθέσεων θα είναι τα [φ1 ]j1 , . . . , [φk ]jk
και για τα εκφορτισμένα θα υπάρχει μια καταγραφή «σε ποια σημεία» της απόδειξης
έχει γίνει η εκφόρτισή τους. Η απόδειξη-δέντρο κατασκευάζεται με βάση τον ακόλουθο
αναδρομικό ορισμό:
(1) Για κάθε φόρμουλα φ και κάθε i ∈ N το δέντρο
φ
με μοναδικό κόμβο την φ είναι απόδειξη της φ από το πακέτο υποθέσεων
[φ]i . Σ΄ αυτήν την περίπτωση το (ζωντανό) πακέτο υποθέσεων [φ]i (πακέτο
i) αποτελείται αποκλειστικά από τη φ και η απόδειξη μπορεί να παρασταθεί
επίσης με φi .
(2) Αν Π1 είναι απόδειξη της φ και Π2 απόδειξη της ψ (και στις δύο περιπτώσεις
αντίστοιχα από κάποια πακέτα υποθέσεων έτσι ώστε να μην είναι δυνατόν
για πακέτο υποθέσεων [φ]i της Π1 και [ψ]i της Π2 να έχουμε φ 6= ψ) τότε
το δέντρο
Π1 Π2 φ ∧ ψ
είναι απόδειξη της φ ∧ ψ από πακέτα υποθέσεων που καθορίζονται από
τους αριθμούς που έχουν αποδοθεί στα φύλλα του ενιαίου δέντρου Π1 Π2
49
φ ∧ ψ και οι οποίοι έχουν κληρονομηθεί από τα δέντρα Π1 και Π2 (δηλαδή
κάθε πακέτο υποθέσεων [φ]i του Π1 Π2 φ ∧ ψείναι πακέτο υποθέσεων είτε
του Π1 είτε του Π2 , εκτός από την περίπτωση που έχουμε για κάποιο i
να υπάρχει πακέτο [φ]i της Π1 και [φ]i της Π2 και στην οποία περίπτωση
ενοποιούμε το πακέτο [φ]i , δηλαδή σ΄ αυτό το πακέτο θα περιλαμβάνονται
όλες οι εμφανίσεις της φi και στα δύο δέντρα Π1 και Π2 .
[Σχηματικά την κατασκευή της νέας απόδειξης θα την εμφανίζουμε ως
..
.
φ
..
.
ψ φ∧ψ
.. ..
. .
όπου φ είναι η απόδειξη Π1 και ψ η απόδειξη Π2 .]
(3) Αν Π είναι απόδειξη της φ ∧ ψ από κάποια πακέτα υποθέσεων τότε Πφείναι
απόδειξη της φ και Πψείναι απόδειξη της ψ, και οι δύο με τα ίδια πακέτα
υποθέσεων.
.. ..
. .
[Παριστάνουμε αυτές τις αποδείξεις με φ ∧ ψφκαι φ ∧ ψψαντίστοιχα.]
(4) Αν Π είναι απόδειξη της ψ από πακέτα υποθέσεων στα οποία περιλαμβάνεται
το πακέτο [φ]i τότε Πiφ → ψ είναι απόδειξη της φ → ψ από τα ίδια πακέτα
υποθέσεων εκτός του ότι το πακέτο [φ]i έχει μεταταχθεί στα εκφορτισμένα,
δηλαδή το [φ]i έχει πάψει να είναι ανοικτό πακέτο (άρα είναι εκφορτισμένο).
[φ]i
..
.
[Σχηματικά μπορούμε να περιγράψουμε τα πιο πάνω λέγοντας ότι αν ψ
[φ]i
..
.
είναι απόδειξη της ψ τότε ψ i φ → ψ είναι απόδειξη της φ → ψ.]
(5) Αν Π είναι απόδειξη της ψ από κάποια πακέτα υποθέσεων και φ μια φόρμουλα
τότε το δέντρο Πφ → ψείναι απόδειξη της φ → ψ από τα ίδια πακέτα
υποθέσεων.
[Ο μηχανισμός αυτός αντιστοιχεί κατά μία έννοια στην εκφόρτιση ενός
«φαινομενικού» πακέτου υποθέσεων [φ]i , όπου το i δεν υπάρχει στα πακέτα
υποθέσεων της απόδειξης Π.]
(6) Με τη συμβολική αναπαράσταση και τις ίδιες προδιαγραφές του ορισμού που
.. ..
. .
χρησιμοποιήσαμε για τη σύζευξη το δέντρο φ → ψ φ ψ είναι απόδειξη της ψ
.. ..
. .
στην περίπτωση που φ → ψ είναι απόδειξη της φ → ψ και φ είναι απόδειξη
της φ.
50
*Παρατηρήσεις - Συμβολισμοί
δημιουργία της απόδειξης Π της φόρμουλας φ δημιουργεί ένα δέντρο στο οποίο
κρατούνται σημειώσεις για τις υποθέσεις (ζωντανές ή εκφορτισμένες) και της ακριβούς
θέσης όπου εκφορτίζεται ένα πακέτο υποθέσεων.
[φ]i
Π Π
Αν με ψ συμβολίσουμε την απόδειξη Π της φόρμουλας ψ και με ψ την απόδειξη
[φ]i
Π
Π της ψ όπου μεταξύ των πακέτων υποθέσεων υπάρχει το [φ]i , ομοίως δε με ψ την
απόδειξη της ψ όπου το πακέτο [φ]i έχει «καταστεί» εκφορτισμένο (έχει εκφορτιστεί)
τότε μπορούμε να διατυπώσουμε συνοπτικά τον ορισμό των αποδείξεων:
[ψ]i
ψ Π1 Π2
π.χ. η ψ είναι απόδειξη, η φ ψ φ ∧ ψ είναι απόδειξη (αφού έχουμε ενοποιήσει
[φ]i
Π1 Π2 Π
τα πακέτα υποθέσεων των φ και ψ ) η ψ i φ → ψείναι απόδειξη κ.ο.κ.
(1) 1 Α 1 A → A . Δηλαδή το A είναι απόδειξη από την υπόθεση A (δηλ. το
πακέτο [A]1 ). ¶ρα μπορούμε να εκφορτίσουμε το πακέτο A1 και να πάρουμε
το A → A χωρίς υποθέσεις.
(2) 1 Α B → A 1 A → (B → A) . (Η εισαγωγή του B αντιστοιχεί στην
περίπτωση 5 του ορισμού. Δηλαδή το B → A εισάγεται στην πορεία της
απόδειξης χωρίς το B να περιέχεται στα ανοικτά πακέτα υποθέσεων).
(3) 2 Α 1 Β A∧B 1 (B → (A ∧ B) 2 A → (B → (A ∧ B)) είναι απόδειξη του
A → (B → (A ∧ B)) χωρίς υποθέσεις.
Σημειώστε ότι όλες οι υποαποδείξεις
A2 , B 1 , A2 B 1 A ∧ B, A2 1 B A∧B 1 B → (A ∧ B), είναι αποδείξεις
των αντίστοιχων φορμουλών από τα αντίστοιχα πακέτα υποθέσεων.
Ως ένα άλλο παράδειγμα απόδειξης θεωρήστε το ακόλουθο δέντρο
1 A → (B → C) 2 AB →C 3 A→B 2 A B C 2 A → C 3 (A → B) → (A → C)
1 (A → (B → C)) → ((A → B) → (A → C))
Σχόλιο. Το redex δημιουργείται όταν έχουμε την εφαρμογή ενός κανόνα εισαγ-
ωγής και αμέσως μετά την εφαρμογή ενός κανόνα απαλοιφής (και στις δύο περιπτώσεις
για τον ίδιο σύνδεσμο). Κατά μία έννοια μια τέτοια ακολουθία είναι μια άσκοπη εναλ-
λαγή αποδείξεων (detour) η οποία δημιουργεί απόδειξη κατά ένα έμμεσο τρόπο. Η
αποκατάσταση έρχεται όταν η απόδειξη αυτή (το redex) αντικατασταθεί με την ευθεία
απόδειξη (που είναι το contractum).
Ισομορφισμός Curry-Howard.
ρόκειται για μια αντιστοιχία μεταξύ των αποδείξεων και των λ-όρων με τύπους
η οποία σέβεται την αναγωγή, δηλαδή την μετάβαση από redex σε contractum. Το
γενικό σχήμα είναι ότι κάθε απόδειξη μιας φόρμουλας φ αντιστοιχεί σε ένα όρο τύπου
52
φ (υπάρχει ταύτιση φορμουλών και τύπων). Και αν θεωρήσουμε ότι οι όροι τύπου σ
είναι προγράμματα τύπου σ ο ισομορφισμός μπορεί σχηματικά να διατυπωθεί
Δηλαδή κάθε απόδειξη μιας φόρμουλας μπορεί να νοηθεί ως ένα πρόγραμμα ενός
τύπου. Η φόρμουλα περιγράφει το τι αποδεικνύει η απόδειξη ενώ ο τύπος περιγράφει
το τι κάνει το πρόγραμμα (το specification του προγράμματος).
Στη συνέχεια δίνεται η περιγραφή του ισομορφισμού.
Αν ταυτίσουμε τους ατομικούς τύπους και τις προτασιακές μεταβλητές και στην
συνέχεια κάθε φόρμουλα (φ → ψ) την ταυτίσουμε με τον τύπο (φ → ψ) και κάθε
φόρμουλα (φ ∧ ψ) με τον τύπο (φ × ψ) μπορούμε να θεωρήσουμε ότι οι φόρμουλες
και οι τύποι ταυτίζονται.
Για παράδειγμα η προτασιακή φόρμουλα (A → B) ∧ (C → A) είναι ο τύπος
(A → B) × (C → A) όπου A, B, C είναι προτασιακές μεταβλητές (ή ατομικοί τύποι).
Θα χρησιμοποιούμε τα γράμματα A, B, C για τις προτασιακές μεταβλητές (το ίδιο
για τους ατομικούς τύπους) και τα φ, ψ,. . . για τις προτασιακές φόρμουλες (ή το ίδιο
για τους τύπους του συστήματος Church).
Σε κάθε απόδειξη Π της φόρμουλας φ από τα πακέτα υποθέσεων [φ1 ]i1 , . . . , [φk ]ik
θα αντιστοιχήσουμε με μοναδικό τρόπο έναν όρο N τύπου φ (δηλ. N φ ) με ελεύθερες
μεταβλητές xφi11 , . . . , xφikk του αρχικού συστήματος Church με γινόμενο τύπων, ως
εξής:
(ο ορισμός θα δίνει και την αντίστροφη αντιστοιχία δηλαδή για κάθε όρο N μια
απόδειξη του συστήματος Church. Για να έχουμε την ακριβή αντιστοιχία θα υποθέ-
σουμε ότι αν xσi και xτj είναι μεταβλητές του συστήματος με τύπους και αν σ 6= τ
τότε και οι δείκτες i και j θα είναι διαφορετικοί, δηλαδή i 6= j. Εδώ π.χ. το i είναι ο
δείκτης σε μια αρίθμηση των συμβόλων μεταβλητών του αρχικού συστήματος Church.
(που έχει ελεύθερη μεταβλητή xφi ). Τότε σύμφωνα με την αντιστοιχία Curry-Howard
[φ]i [φ]i
Π1 Π1
η απόδειξη ψ i φ → ψαντιστοιχεί στον όρο λxφi M ψ και η απόδειξη ψ i φ → ψ
Π2
φ ψ (που είναι redex ) αντιστοιχεί στον όρο (λxφi M ψ )N φ (που κι΄ αυτός είναι – το
[φ]i
Π1 Π2
αντίστοιχο – redex ). Είναι εύκολο να δούμε ότι το contractum της ψ i φ→ψ φ ψ
Π2
[φ]1
Π1
που είναι η απόδειξη ψ αντιστοιχεί στον όρο M ψ [xφi := N ] που είναι το contractum
του (λxφi M ψ )N φ .
54
ΕΞΙΣΩΤΙΚΗ ΛΟΓΙΚΗ
Παράδειγμα. Η κατηγορία των συνόλων Set, που έχει ως αντικείμενα σύνολα και
ως μορφισμούς τις γνωστές συνολοθεωρητικές συναρτήσεις. Ο τελεστής σύνθεσης
56
είναι η συνολοθεωρητική σύνθεση συναρτήσεων και οι ταυτοτικοί μορφισμοί είναι οι
ταυτοτικές συναρτήσεις.
domf = (P, ≤P )
codf = (Q, ≤Q )
f ∈ P oSet((P, ≤P ), (Q, ≤Q ))
Επίσης, για κάθε μερική διάταξη (P, ≤P ) η ταυτοτική συνάρτηση idP διατηρεί τη
διάταξη στο P και ικανοποιεί τον ταυτοτικό νόμο.
Η σύνθεση δύο συναρτήσεων που διατηρούν τη μερική διάταξη είναι μια συνάρτηση
που διατηρεί τη μερική διάταξη. Πράγματι, έστω οι συναρτήσεις f : P → Q, g : Q → R
που διατηρούν τη μερική διάταξη. Τότε εάν p ≤P p0 , επειδή η f διατηρεί τη μερική
διάταξη, ισχύει ότι
f (p) ≤Q f (p0 )
και επειδή η g διατηρεί κι αυτή τη μερική διάταξη έχουμε
g (f (p)) ≤Q g (f (p0 ))
Ορισμός. ΄Ενα μονοειδές (M, ·, e) αποτελείται από ένα σύνολο M , μια διμελή
πράξη · και ένα ουδέτερο στοιχείο e τέτοια ώστε να ισχύει:
x · (y · z) = (x · y) · z για κάθε x, y, z ∈ M
57
και
e · x = x = x · e για κάθε x ∈ M
zero : Int
true : Bool
f alse : Bool
unit : U nit
Οι σταθερές zero, true, f alse, και unit είναι μορφισμοί από το αντικείμενο U nit
στα αντικείμενα Int, Bool, Bool, και U nit αντίστοιχα, οι οποίοι συνδέουν το μοναδικό
στοιχείο του U nit με τα αντίστοιχα στοιχεία αυτών των τύπων.
Ο παρακάτω πίνακας περιέχει μερικές βασικές κατηγορίες:
Παράδειγμα. Μια ομάδα (G, ·, −1, e) είναι ένα σύνολο G μαζί με μία δυαδική
πράξη ·, ένα μοναδιαίο τελεστή −1, και ένα διακεκριμένο στοιχείο e τέτοια ώστε:
(x · y) · z = x · (y · z) για κάθε x, y, z ∈ G
e·x = x · e για κάθε x ∈ G
x · x−1 = e = x−1 · x για κάθε x ∈ G
Ορισμός. ΄Ενα διάγραμμα σε μια κατηγορία C είναι μια συλλογή από «ακμές»
και «κόμβους» που αντιστοιχούν σε μορφισμούς και αντικείμενα της C με συνεπή
τρόπο. Αυτό σημαίνει ότι εάν μια «ακμή» σε ένα διάγραμμα αντιστοιχεί σε ένα μορ-
φισμό f και αυτός έχει τη μορφή f : A → B τότε οι κόμβοι αυτής της ακμής είναι το
A και το B.
Φιγυρε 0.0.2
Φιγυρε 0.0.3
(a, b) : (f : A → B) → (f 0 : A0 → B 0 )
(a0 , b0 ) : (f 0 : A0 → B 0 ) → (f 00 : A00 → B 00 )
60
Φιγυρε 0.0.4
Φιγυρε 0.0.5
Πρόταση. Εάν και τα δύο εσωτερικά τετράγωνα είναι μεταθετικά, τότε το αυτό
συμβαίνει και με το εξωτερικό ¨παραλληλόγραμμο¨.
Φιγυρε 0.0.6
(g 0 ◦ g) ◦ a = g 0 ◦ (g ◦ a) προσεταιριστική ιδιότητα
= g 0 ◦ (b ◦ f ) μεταθετικότητα 1ου τετραγώνου
= (g 0 ◦ b) ◦ f προσεταιριστική ιδιότητα
= (c ◦ f 0 ) ◦ f μεταθετικότητα 2ου τετραγώνου
= c ◦ (f 0 ◦ f ) προτεταιριστική ιδιότητα
61
Παράδειγμα. Στην κατηγορία FPL το παρακάτω διάγραμμα είναι μεταθετικό.
Φιγυρε 0.0.7
Παράδειγμα. Στην Set το κενό σύνολο {} είναι το μόνο αρχικό αντικείμενο για
κάθε σύνολο S και η κενή συνάρτηση είναι ο μόνος μορφισμός από το {} στο S.
Κάθε σύνολο με ένα μόνο στοιχείο {x} είναι ένα τελικό αντικείμενο, αφού για
κάθε σύνολο S υπάρχει συνάρτηση από το S στο {x} που στέλνει κάθε στοιχείο του
S στο x και αυτή είναι ο μοναδικός μορφισμός από το S στο {x}.
A × B = {(a, b) |a ∈ A & b ∈ B}
Ορισμός. ΄Ενα γινόμενο (προδυςτ) δύο αντικειμένων A και B είναι ένα αντικεί-
μενο A×B , μαζί με δύο μορφισμούς προβολής π1 : A×B → A και π2 : A×B → B, τέ-
τοιους ώστε για κάθε αντικείμενο C και ζεύγος μορφισμών f : C → A και g : C → B
υπάρχει ακριβώς ένας ενδιάμεσος μορφισμός hf, gi : C → A × B ο οποίος κάνει το
παρακάτω διάγραμμα μεταθετικό,
Φιγυρε 0.0.8
έτσι ώστε
π1 ◦ hf, gi = f
και
π2 ◦ hf, gi = g
Εάν μια κατηγορία C έχει ένα γινόμενο A × B για κάθε ζεύγος αντικειμένων λέμε ότι
η κατηγορία έχει γινόμενα.
Ορισμός. Εάν A × C και B × D είναι δύο γινόμενα, τότε για κάθε ζεύγος από
μορφισμούςf : A → B και g : C → D, η απεικόνιση γινόμενο
f ×g :A×C →B×D
είναι η απεικόνιση-μορφισμός
hf ◦ π1 , g ◦ π2 i
i1 : A → A + B
64
και
i2 : B → A + B
τέτοιους ώστε για κάθε αντικείμενο C και ζεύγος μορφισμών f : A → C και g : B →
C υπάρχει ακριβώς ένας μορφισμός
[f, g] : A + B → C
Φιγυρε 0.0.9
Φιγυρε 0.0.10
65
Ορισμός. ΄Εστω f, g : A → B. ΄Ενας μορφισμός e : X → A καλείται εξισωτής
(εχυαλιζερ) των f, g αν
(1) f ◦ e = g ◦ e
(2) ∀e0 : X 0 → A τέτοιο ώστε f ◦ e0 = g ◦ e0 , ∃!k : X 0 → X με e ◦ k = e0 .
f : R × R → R, f (x, y) = x2 − y 2
g : R × R → R, g (x, y) = 1
ως μορφισμούς της κατηγορίας Set και τον μοναδιαίο κύκλο
X = (x, y) |x2 + y 2 = 1
Τότε ο μορφισμός
i:X →R×R
είναι εξισωτής των f, g.
Φιγυρε 0.0.11
f ◦ 1 = f ◦ (e ◦ h) = (f ◦ e) ◦ h = (g ◦ e) ◦ h = g ◦ (e ◦ h) = g ◦ 1
Φιγυρε 0.0.12
66
Προοφ. ∃!j 0 : X 0 → X τέτοιος ώστε e0 = e ◦ j 0 (e : εξισωτής),
∃!j : X → X 0 τέτοιος ώστε e = e0 ◦ j (e0 : εξισωτής).
e ◦ j 0 ◦ j = e0 ◦ j = e = e ◦ idX
δηλαδή j 0 ◦ j = idX .
Ομοίως j ◦ j 0 = idX , δηλαδή ο j είναι ισομορφισμός.
Φιγυρε 0.0.13
Προοφ. f ◦ e = g ◦ e [e : εξισωτής]
⇒ f = g [e : επιμορφισμός]
⇒ f ◦ idA = g ◦ idA
⇒ ∃!k : A → X τέτοιο ώστε e ◦ k = idA
⇒ e ◦ k ◦ e = idA ◦ e = e = e ◦ idX
⇒ k ◦ e = idX [e : μονομορφισμός]
Φιγυρε 0.0.14
Φιγυρε 0.0.16
Παράδειγμα. Τομή A, B ⊆ C
Φιγυρε 0.0.17
Φιγυρε 0.0.18
Φιγυρε 0.0.19
Φιγυρε 0.0.20
Φιγυρε 0.0.21
Προοφ. ΄Ασκηση.
Φιγυρε 0.0.23
Φιγυρε 0.0.24
Φιγυρε 0.0.26
΄Ορια. Οι μέχρι τώρα έννοιες που εξετάσαμε - αρχικά και τελικά αντικείμενα,
εξισωτές, συν-εξισωτές, εφελκύσεις και εξωθήσεις - αποτελούν παραδείγματα καθο-
λικών κατασκευών. Αποτελούν δε ειδικές περιπτώσεις των πιο γενικών εννοιών του
ορίου και του συν – ορίου ενός διαγράμματος.
Ορισμός. ΄Εστω C μια κατηγορία και D ένα διάγραμμα στη C. ΄Ενας κώνος
(ςονε) του D είναι ένα C−αντικείμενο X και οι μορφισμοί fi : X → Di (ένας για
κάθε αντικείμενο Di στο D) τέτοιοι ώστε για κάθε μορφισμό g στο D, το ακόλουθο
διάγραμμα να είναι μεταθετικό.
Χρησιμοποιούμε το σύμβολο {fi : X → Di } για τους κώνους.
Ορισμός. ΄Ενα όριο για το διάγραμμα D είναι ένας κώνος {fi : X → Di } με την
ιδιότητα ότι εάν {fi0 : X 0 → Di } είναι ένας άλλος κώνος για το D τότε υπάρχει ένας
μοναδικός μορφισμός k : X 0 → X έτσι ώστε το διάγραμμα
να είναι μεταθετικό για κάθε Di ∈ D.
71
Φιγυρε 0.0.27
Φιγυρε 0.0.28
Φιγυρε 0.0.29
΄Ενας κώνος όριο των παραπάνω είναι ένα γινόμενο των A και B.
Φιγυρε 0.0.30
΄Ενας κώνος για το D είναι ένα αντικείμενο R και τρεις μορφισμοί f 0 , g 0 και h
τέτοια ώστε το διάγραμμα του σχήματος 0.0.31 να είναι μεταθετικό.
Επειδή f ◦ g 0 = h = g ◦ f 0 , το διάγραμμα του σχήματος 0.0.31 είναι ισοδύναμο με
αυτό του σχήματος 0.0.32.
72
Φιγυρε 0.0.31.
Φιγυρε 0.0.32.
Φιγυρε 0.0.33
B A = {f : A → B}
eval : B A × A
→ B
eval (f, a) = f (a)
Φιγυρε 0.0.34
gc (a) = g (c, a)
curry (g) (c) = gc
Δηλαδή για κάθε (c, a) ∈ C × A ισχύει:
Φιγυρε 0.0.35
Συναρτητές.
Εάν ένα λογικό σύστημα κατά Λαμβεκ εμπλουτιστεί και με τους εξής τρεις κανόνες:
f :ΓAB∆→C
(1) f i :ΓBA∆→C (εναλλαγή - ιντερςηανγε)
f :ΓAA→B
(2) f i :ΓA→B (συστολή - ςοντραςτιον)
f :Γ→B
(3) f i :ΓA→B (εκλέπτυνση - τηινινγ)
Η παραπάνω ιδέα οδήγησε τους J. Goguen και R.Burstall να εισάγουν την αφηρημένη
θεωρία μοντέλων στην πληροφορική, υπό τη μορφή της θεωρίας θεσμών (theory of in-
stitutions). Η θεωρία θεσμών προτείνει μια γενική έννοια λογικού συστήματος η οποία
μας επιτρέπει την ανάπτυξη μιας σειράς εφαρμογών της πληροφορικής ανεξάρτητα από
ένα συγκεκριμένο λογικό σύστημα. Η θεωρία θεσμών προτείνει καταρχήν ένα αλ-
γεβρικό ορισμό της αφηρημένης έννοιας του λογικού συστήματος. Οι θεσμοί είναι
δηλαδή μια αλγεβρική συνεισφορά στο ανοικτό φιλοσοφικό ζήτημα του ορισμού μιας
έννοιας αφηρημένου λογικού συστήματος. Στη φιλοσοφία βέβαια, η πιο διαδεδομένη
απάντηση στο παραπλήσιο ερώτημα τι είναι η λογική· είναι εκείνη που υποστηρίζει πως
λογική είναι η επιστήμη που έχει ως αντικείμενο μελέτης το συλλογισμό και τους νό-
μους της λογικής παραγωγής (deduction). ΄Αλλες απαντήσεις είναι πιο ειδικές δίνοντας
μεγαλύτερη έμφαση σε συγκεκριμένες συλλογιστικές πρακτικές ή ορισμούς λογικών
συστημάτων, ή υποστηρίζουν πως η λογική συνδέεται με πτυχές του φαινομένου της
αντίληψης και της συνείδησης (ψυχολογισμός - psychologism).
Πολλές φορές στην πληροφορική υπάρχει η ανάγκη χρησιμοποίησης περισσότερων
από ένα λογικών συστημάτων ταυτόχρονα, κατά τρόπο παράλληλο και οργανωμένο σ΄
αυτό που διαισθητικά αντιλαμβανόμαστε σαν δομή ή σύστημα. Ειδικά στην περίπτωση
των προδιαγραφών είναι επιθυμητή η χρησιμοποίηση περισσότερων από ένα λογικών
συστημάτων μια και έτσι μπορούν να αξιοποιηθούν τα ξεχωριστά πλεονεκτήματα που
έχει το καθένα, με σκοπό τη βελτιστοποίηση της προδιαγραφής του συστήματος
που μας ενδιαφέρει. Ακόμα, τα οργανωμένα με αυτό τον τρόπο λογικά συστήματα
μας επιτρέπουν και τη δυνατότητα ορθής μετάφρασης προδιαγραφών από ένα λογικό
σύστημα σε ένα άλλο. Η θεωρία θεσμών προσφέρει κατάλληλο μαθηματικό πλαίσιο
για την αξιοποίηση από την τεχνολογία λογισμικού περισσοτέρων του ενός λογικών
συστημάτων.
Συνοψίζοντας, μπορεί να διακρίνει κανείς τρεις τουλάχιστον φάσεις στη σχέση
λογικής και πληροφορικής:
Καθολική ΄Αλγεβρα.
ε αυτή την υπό-ενότητα θα παρουσιάσουμε τις βασικές αρχές της Καθολικής ΄Αλ-
γεβρας (GeneralAlgebra) [11, 12, 13], που είναι η βάση της ΄Αλγεβρας με πολλούς
Τύπους και Διάταξη (OrderSortedAlgebra) .
Μια άλγεβρα Birkhof f αποτελείται από ένα σύνολο (μη κενό), που καλείται
φορέας της άλγεβρας και από μία οικογένεια από συναρτήσεις ορισμένες πάνω σε
καρτεσιανά γινόμενα του φορέα και τιμές στο φορέα. Πιο συγκεκριμένα:
78
Ορισμός. Μία άλγεβρα Birkhof f είναι κάθε ζεύγος (A, B), όπου A είναι ένα
μη κενό σύνολο και B είναι μία οικογένεια συναρτήσεων της μορφής
f : A × A × ... × A → A
Πολλές από τις πιο γνωστές αλγεβρικές δομές ικανοποιούν τον παραπάνω ορισμό,
όπως οι ομάδες, τα σώματα, οι δακτύλιοι και οι ημιομάδες. Από την άλλη μεριά όμως
είναι φανερό ότι άλλες αλγεβρικές δομές, για παράδειγμα τα αυτόματα (ακολουθιακές
μηχανές), ή τα modules (“διανυσματικοί χώροι πάνω σε δακτύλιο”) δεν είναι άλγεβρες.
Ακολουθούν μερικοί προκαταρκτικοί ορισμοί.
Ορισμός. ΄Εστω S ένα μη κενό σύνολο (το σύνολο των τύπων). Ονομάζουμε
τότεS−σύνολο κάθε οικογένεια συνόλων της μορφής {As |s ∈ S}, όπου σε κάθε
στοιχείο s του S αντιστοιχεί και ένα σύνολο A.
Παράδειγμα. Αυτόματα
΄Ενα αυτόματο αποτελείται από τρία σύνολα X, S, Y , τα οποία καλούμε σύνολο
εισόδου, σύνολο καταστάσεων και σύνολο εξόδου αντίστοιχα, ένα στοιχείο
s0 ∈ S που καλείται αρχική κατάσταση και δύο συναρτήσεις f : X × S → S και
g : S → Y τις οποίες ονομάζουμε συνάρτηση μεταφοράς και συνάρτηση
εξόδου αντίστοιχα.
΄Εστω S AU T = {Input (Είσοδος) , State(Κατάσταση) , Output (΄Εξοδος) } το
σύνολο των ειδών. Τότε η S AU T −χαρακτηριστική ΣAU T ορίζεται ως εξής:
ΣAU T
h[,],Statei = {S0 } (Η S0 καλείται αρχική κατάσταση)
ΣAU T
hInput,State,Statei = {f }
ΣAU T
hState,Outputi = {g} και Σw,s = ∅ για όλα τα άλλα w ∈ S
AU T
και s ∈ S AU T
Παράδειγμα. M odules
΄Εστω ΣM OD είναι μία S M OD −χαρακτηριστική με S M OD = {∆1 , ∆2 }, όπου
∆1 :Δακτύλιος και ∆2 :Διανύσματα και
ΣM OD
h∆1 ,∆2 i = {+, −, 0, ×, 1} ,
ΣM OD
h∆1 ,∆2 i = {+, −, 0} ,
ΣM OD
h∆1 ,∆2 ,∆3 i = {ν} , (βαθμωτό γινόμενο)
Τότε ένα module πάνω στο δακτύλιο R είναι μια ΣM OD −άλγεβρα M όπου M∆1 =
R και M∆2 = V (ένα σύνολο διανυσμάτων).
Θεώρημα. Η άλγεβρα TΣ είναι αρχική στην κατηγορία AlgΣ όλων των Σ−αλγεβρών.
S [n] [n]
Προοφ. Η S−οικογένεια T γράφεται και ως εξής: TΣ = TΣ , όπου τα TΣ
n
ορίζονται αναδρομικά ως εξής:
[0]
TΣ = Σh[,],Si |s ∈ S
[n+1] [0]
TΣ = TΣ ∪
Dn o E
[n]
σ (t1 , . . . , tn ) |σ ∈ ΣS1 ...Sn ,S , ti ∈ TΣ | i = 1, . . . , n, s1 , . . . , sn ∈ S |s ∈ S
s
81
΄Εστω μία τυχαία Σ−άλγεβρα A και δύο ομομορφισμοί h, h0 : TΣ → A. Θα
δείξουμε ότι h = h0 δια της επαγωγής επί του n. ΄Οταν n = 0 οι ομομορφισμοί h και
h0 ταυτίζονται επειδή h (σ) = σ = h0 (σ).
[n]
Ας υποθέσουμε ότι οι ομομορφισμοί h και h0 ταυτίζονται επί του TΣ . Τότε
επειδή
h (σ (t1 , . . . , tn )) = σ (h0 (t1 ) , . . . , h0 (tn )) = h0 (σ (t1 , . . . , tn )) ,
[n+1]
οι ομομορφισμοί h και h0 ταυτίζονται και επί του TΣ . Συνεπώς οι h και h0
ταυτίζονται επί του TΣ .
Η ύπαρξη του ομομορφισμού h εξασφαλίζεται πάλι δια της επαγωγής επί του n.
[0]
Είναι προφανές ότι μπορούμε να ορίσουμε τον h τόσο επί του TΣ σαν h (σ) = σ όσο
[n+1]
και επί του TΣ αφού h (σ (t1 , . . . , tn )) = σ (h (t1 ) , . . . , h (tn )) και έχουμε υποθέσει
[n]
λόγω επαγωγής ότι ο h έχει ήδη ορισθεί επί του TΣ .
Η παρακάτω πρόταση έχει οδηγήσει στον ορισμό της ιδιαίτερα σημαντικής για
την πληροφορική έννοιας του αφηρημένου τύπου δεδομένων (abstractdatatype). Ο
ορισμός οφείλεται στην ομάδα ADJ.
Πρόταση. ΄Εστω δύο Σ−άλγεβρες A και A0 . Εάν και οι δύο είναι αρχικές σε
σχέση με την κατηγορία AlgΣ όλων των Σ−αλγεβρών, τότε οι A και A0 είναι ισό-
μορφες. Εάν μια άλγεβρα A00 στην AlgΣ είναι ισόμορφη με μια άλγεβρα A που είναι
αρχική σε σχέση με την AlgΣ, τότε και η A00 θα είναι επίσης αρχική.
Είναι προφανές ότι οι ισομορφισμοί ορίζουν μια σχέση ισοδυναμίας επί της κλάσης
των Σ−αλγεβρών. Καλούμε κλάση ισομορφισμού Σ−αλγεβρών κάθε κλάση ισο-
δυναμίας Σ−αλγεβρών που προκύπτει από τους ισομορφισμούς.
Μία χαρακτηριστική Σ θα καλείται κανονική αν και μόνο αν για κάθε σ ∈ Fw1 →s1
αν w0 ≤ w1 τότε υπάρχει ένα ελάχιστο < w, s >∈ S ∗ × S τέτοιο ώστε w0 ≤ w και
σ ∈ Fw→s . Δεδομένης μιας χαρακτηριστικής (S, F, ≤) μια (S, F, ≤)-άλγεβρα Α, είναι
απλά μια (S, F )-άλγεβρα για την οποία ισχύουν οι ακόλουθες συνθήκες:
• Αν s ≤ s0 τότε As ⊆ As0
• Αν σ ∈ Σw1 →s1 ∩ Σw2→s2 και w1 ≤ w2 τότε Aσ : Aw1 → As1 είναι ίσο με
το Aσ : Aw2 → As2 πάνω στο w1 .
΄Οπως και στη περίπτωση χωρίς διάταξη έτσι και εδώ θα ορίσουμε τώρα τα μοντέλα
μας, δηλαδή τις άλγεβρες, ώστε να ερμηνεύσουμε τα σύμβολα τελεστών με πραγματικές
συναρτήσεις και τους τύπους με σύνολα.
83
΄Εστω (S, F, ≤) είναι μια χαρακτηριστική. Τότε μία (S, F, ≤)-άλγεβρα Α είναι
και πάλι μία οικογένεια από σύνολα {As |s ∈ S} τα οποία καλούμε φορείς του Α και
μία οικογένεια συναρτήσεων {Aσ : Aw → As |σ ∈ Fw→s } όπου w = s1 . . . sn και
Aw = As1 × Asn , τέτοια ώστε:
(1) αν s ≤ s0 τότε As ⊆ As0
(2) αν σ ∈ Σw1 →s1 ∩ Σw2 →s2 και w1 ≤ w2 τότε η Aσ : Aw1 → Aw2 ταυτίζεται
με την Aσ : Aw2 → As2 στο Aw1 .
Με παρόμοιο τρόπο θα επεκτείνουμε τώρα και τους ορισμούς για τους ομομορφισμούς
ανάμεσα σε δύο άλγεβρες. ΄Ενας (S, ≤, F )-ομομορφισμός ανάμεσα σε δύο άλγεβρες
Α και Β, h : A → B, ορίζεται απλά ώς ένας (S, F )-ομομορφισμός ο οποίος ικανοποιεί
την ακόλουθη συνθήκη μονοτονίας:
• Αν s ≤ s0 και a ∈ As τότε ισχύει ότι hs (a) = h0s (a)
Και πάλι οι (S, F, ≤)-άλγεβρες ως αντικείμενα και οι (S, F, ≤)-ομομορφισμοί ως βέλη
ορίζουν μία κατηγορία η οποία συμβολίζεται με OSAlg(S,F,≤) . Οι άλγεβρες των όρων
ορίζονται με παρόμοιο τρόπο και στην ΑΔΤ: ΄Εστω λοιπόν μια χαρακτηριστική Σ =
(S, F, ≤) η άλγεβρα των Σ-όρων TΣ ορίζεται ως η ελάχιστη οικογένεια {TΣ,s |s ∈ S}
η οποία ικανοποιεί τις ακόλουθες συνθήκες:
• F[]→s ⊆ TΣ,s για κάθε s ∈ S
• TΣ,s ⊆ TΣ,s0 αν s ≤ s0
• Αν σ ∈ Fw→s και ti ∈ TΣ,si με w = s1 . . . sn τότε σ(t1 . . . tn ) ∈ TΣ,s .
• για κάθε σ ∈ Fw→s ορίζουμε την Tσ : TΣ,w → TΣ,s που απεικονίζει τα
t1 . . . tn στη (συμβολοακολουθία) σ(t1 . . . tn )
Είναι προφανές ότι η TΣ είναι μία ΑΔΤ. ΄Ομως στη γενική περίπτωση δεν ισχύει ότι
S
TΣ,s = TΣ,s0 ούτε καν ότι TΣ,s = s≤s0 TΣ,s . Επίσης είναι πιθανόν ότι TΣ,s = ∅
για κάποιο τύπο s, δηλαδή να μην ορίζονται επίπεδοι όροι γι΄ αυτόν τον τύπο. Το
ακόλουθο αποτέλεσμα αποτελεί γενίκευση αυτού της γενικής άλγεβρας με πολλούς
τύπους.
Για να απαλλαγούμε από τέτοιες ανωμαλίες ορίζουμε πότε μία ΑΔΤ είναι συνεπής(ςοηερεντ)
και στη συνέχεια θα υποθέτουμε ότι ασχολούμαστε μόνον με τέτοιες Σ-άλγεβρες.
΄Ενα σύνολο με διάταξη (S, ≤) λέγεται ότι είναι (προς τα επάνω) φιλτραρισμένο
ανν για κάθε δύο στοιχεία s, s0 ∈ S υπάρχει ένα τρίτο s00 ∈ S τέτοιο ώστε s, s0 ≤ s00 .
Το S λέγεται τοπικά φιλτραρισμένο αν και μόνο αν τα συνδεδεμένα στοιχεία του
είναι φιλτραρισμένα. Μία χαρακτηριστική λέγεται συνεπής ανν το (S, ≤) είναι τοπικά
φιλτραρισμένο και κανονικό.
΄Εχοντας απαλλαγεί από τις ανωμαλίες αυτές μπορούμε τώρα να ορίσουμε τους
κανόνες επαγωγής νέων εξισώσεων από ήδη υπάρχουσες, δηλαδή τη λογική της ΑΔΤ.
΄Εστω λοιπόν μία χαρακτηριστική Σ η οποία είναι συνεπής και Ε ένα σύνολο Σ-
εξισώσεων.
(1) Ανακλαστικότητα. Η εξίσωση (∀X)t = t επάγεται πάντα
(2) Συμμετρία. Αν η εξίσωση (∀X)t = t0 επάγεται, τότε επάγεται και η (∀X)t0 =
t
(3) Μεταβατικότητα. Αν επάγονται οι εξισώσεις (∀X)t = t0 και (∀X)t0 = t00 ,
τότε επάγεται η εξίσωση (∀X)t = t00 .
(4) Ισοδυναμία. Αν επάγονται οι εξίσωσεις (∀X)ti = t0i όπου ti , t0i ∈ (TΣ )si ,
i = 1 . . . n τότε για κάθε σ ∈ Fw→s με w = s1 . . . sn , επάγεται η εξίσωση
(∀X)σ(t1 . . . tn ) = σ(t01 . . . t0n )
(5) Αντικαταστασιμότητα. ΄Εστω η εξίσωση (∀Y )t = t0 αν t1 = t01 , . . . tn = t0n
στο Ε και έστω μία αντικατάσταση θ : Y → TΣ τέτοια ώστε για κάθε
i = 1, . . . n να επάγεται ότι (∀X)θ∗ (ti ) = θ∗ (t0i ). Τότε επάγεται και η
εξίσωση (∀X)θ∗ (t) = θ∗ (t0 ).
΄Οσο αφορά τα μοντέλα των κρυφών χαρακτηριστικών έχουμε ότι μία κρυφή Σ-
άλγεβρα είναι απλά μία Σ-άλγεβρα Α με πολλούς τύπους τέτοια ώστε AΨ = D.
Η διαίσθηση πίσω από τους συμπεριφοριακούς τελεστές είναι ότι αυτοί ορίζουν
διάφορα «πειράματα» που επιστρέφουν αποτελέσματα ορατού τύπου και μέσω των
αποτελεσμάτων των πειραμάτων αυτών μπορούμε να ορίσουμε ισότητες στις καταστά-
σεις του συστήματός μας. Δηλαδή, δεν μας ενδιαφέρει τόσο η εσωτερική κατάσταση
ενός συστήματος όσο η συμπεριφορά που μπορούμε εμείς να παρατηρήσουμε.
Από τον προηγούμενο ορισμό είναι εμφανές ότι στην περίπτωση των ορατών τύπων
η Γ-συμπεριφοριακή ισότητα ταυτίζεται με την κανονική ισότητα. Ειναί πολύ σημαντικό
να προσέξουμε ότι η ≡Σ,Γ εξαρτάται τόσο από τη Σ όσο και από την υποχαρακτηρισ-
τική της Γ. Στη συνέχεια όταν το Σ δεν είναι απαραίτητο θα τη συμβολίζουμε και ως
≡Γ
[Γ-Συμπεριφοριακή Ισοδυναμία]
Μια Γ-Συμπεριφοριακή Ισοδυναμία (Γ-behavioralcongruence) σε μία κρυφή άλ-
γεβρα Α, για μία κρυφή υπό-χαρακτηριστική Γ ορίζεται ως οποιαδήποτε σχέση ισο-
δυναμίας που είναι ισότητα για τους ορατού τύπου όρους και κάθε τελεστής στο Γ
είναι διατηρητικός ως προς αυτή.
΄Εχοντας ορίσει τις κρυφές άλγεβρες, εξισώσεις και την ικανοποιησιμότητα αυτών
είμαστε έτοιμοι να μελετήσουμε τους κανόνες επαγωγής εξισώσεων για την κρυφή
άλγεβρα. Παρόλ΄ αυτά χρειάζεται ιδιαίτερη προσοχή όπως θα δούμε γιατί εν γένει δεν
ισχύει ότι όλοι οι τελεστές είναι διατηριτικοί, επομένως θα χρειαστεί να τροποποιή-
σουμε τον κανόνα της ισοδυναμίας που είχαμε για την άλγεβρα με πολλούς τύπους
(και διάταξη).
Τηεορψ: ΣΕΤ
ηιδδεν σορτ: Σετ
οπερατιονς:
ιν : Νατ Σετ -᾿ Βοολ
εμπτψ : -᾿ Σετ
αδδ : Νατ Σετ -᾿ Σετ
υνιον : Σετ Σετ -᾿ Σετ
· : Σετ Σετ -᾿ Σετ
νεγ : Σετ -᾿ Σετ
αξιομς:
φοραλλ Σ,Σ΄.Σετ, Ν, Ν΄.Νατ
Ν ιν εμπτψ = φαλσε
Ν ιν αδδ(Ν΄,Σ) = (Ν = Ν) ορ (Ν ιν Σ)
Ν ιν υνιον(Σ,Σ΄) = (Ν ιν Σ) ορ (Ν ιν Σ΄)
Ν ιν ·(Σ,Σ΄) = (Ν ιν Σ) ανδ (Ν ιν Σ΄)
Ν ιν νεγ(Σ) = νοτ (Ν ιν Σ)
Και θέλουμε να δείξουμε ότι για κάθε Σ-άλγεβρα Α που είναι μοντέλο της προ-
διαγραφής SET, ∀S, S 0 ∈ ASet union(S, S 0 ) = union(S 0 , S) δηλαδή ισχύει η αν-
τιμεταθετικότητα της ένωσης των συνόλων. Ας θυμηθούμε ότι δύο κρυφοί όροι
είναι συμπεριφοριακά ισοδύναμοι ανν για κάθε ορατό περιεχόμενο η αντικατάσταση
των όρων στο περιεχόμενο αυτό δίνει ίσους όρους. Παρόλ΄ αυτά μία τέτοια απόδειξη
θα απαιτούσε επαγωγή στα πιθανά Γ-περιεχόμενα γεγονός που αυξάνει κατα πολύ
την πολυπλοκότητα της. Μέσω αυτού του παραδείγματος θα δούμε μια μεθοδολογία
απόδειξης που μειώνει δραματικά τη πολυπλοκότητα αυτή.
΄Εστω ότι R είναι μία σχέση πάνω στο σύνολο φορέα ASet . Αν δείξουμε ότι η
R είναι είναι μία Γ-ισοδυναμία τότε από το θεμελιώδες θεώρημα της κρυφής άλγεβρας
(Θεώρημα 5) θα ισχύει ότι R ⊆≡Σ,Γ . ΄Ετσι μπορούμε να δείξουμε τη σχέση μας
χρησιμοποιώντας την R και αποφεύγοντας την επαγωγή στα περιεχόμενα.
Για παράδειγμα στη προδιαγραφή SET μπορούμε να ορίσουμε ώς R = {S, S 0 |
∀intn.(ninS) ↔ (ninS 0 )}. Πρέπει να δείξουμε τώρα ότι η R είναι μία κρυφή Γ-
ισοδυναμία. ΄Εστω λοιπόν ότι R(S, S 0 ). Θα δείξουμε ότι ο τελεστής add ∈ Γ διατηρεί
την R όλες οι άλλες περιπτώσεις μπορούν να δειχθούν με παρόμοια επιχειρήματα.
92
΄Εστω n ∈ AN at , τότε (∀N ∈ AN at )N in add(n, S) από την εξίσωση Ν ιν αδδ(Ν΄,Σ)
= (Ν = Ν) ορ (Ν ιν Σ) θα ισχύει ότι είτε n = N είτε N in S. Αλλά αφού R(S, S 0 ) τότε
αν N in S → N in S 0 .Οπότε (∀N ∈ AN at )N in add(n, S) → N in add(n, S 0 ). Με αν-
τίστροφα επιχειρήματα καταλήγουμε (∀N ∈ AN at )N in add(n, S 0 ) → N in add(n, S),
άρα ο τελεστής add διατηρεί την R.
Αφού λοιπόν η R είναι Γ-ισοδυναμία περιλαμβάνεται στη Γ-ισότητα και έτσι μπορούμε
να δείξουμε την ιδιότητα που μας ενδιαφέρει με αυτή. Θέλουμε λοιπόν να δείξουμε ότι
union(S, S 0 ) R union(S 0 , S) το οποίο συνεπάγεται ότι ∀n.N at αν n in union(S, S 0 )
τότε n in union(S 0 , S). Αλλά από την εξίσωση Ν ιν υνιον(Σ,Σ΄) = (Ν ιν Σ) ορ
(Ν ιν Σ΄) προφανώς και ισχύει αυτό, άρα ισχύει και η ζητούμενη ιδιότητα. ΄Ετσι
λοιπόν έχουμε ότι A |=Σ,Γ union(S, S 0 ) = union(S 0 , S) και επειδή η Σ-άλγεβρα Α
επιλέχθηκε τυχαία έχουμε ότι B |= union(S, S 0 ) = union(S 0 , S), δηλαδή η ιδιότητα
ισχύει για κάθε μοντέλο της προδιαγραφής.
Τηεορψ: ΒΥΦ1
ηιδδεν σορτ: Βυφ
οπερατιονς:
ινιτ : -᾿ Βυφ
πυτ : Νατ Βυφ -᾿ Νατ
γετ : Βυφ -᾿ Νατ
τακε : Βυφ -᾿ Βυφ
εμπτψ; : Βυφ -᾿ Βοολ
93
αξιομς:
φοραλλ Β.Βυφφερ, Ν.Νατ
εμπτψ;(ινιτ) = τρυε
εμπτψ;(τακε(Β» = τρυε ιφ εμπτψ;(Β)
εμπτψ;(πυτ(Ν,Β» = φαλσε
εμπτψ;(Β) = τρυε ιφ γετ(Β) = ερρ
τακε(πυτ(Ν,Β» = πυτ(Ε,τακε(Β» ιφ νοτ εμπτψ;(Β)
τακε(πυτ(Ν,Β» = τακε(Β) ιφ εμπτψ;(Β)
γετ(Β) = ερρ ιφ εμπτψ;(Β)
γετ(πυτ(Ε,Β» = Ε ιφ εμπτψ;(Β)
γετ(πυτ(Ε,Β» = γετ(Β) ιφ νοτ εμπτψ;(Β)
Η παραπάνω αναπαράσταση ορίζει BUF1 = (Σ, Γ, E), όπου init ∈ Σ→Buf , put ∈
ΣN atBuf →Buf , get ∈ ΣBuf →N at , take ∈ ΣBuf →Buf και empty? ∈ ΣBuf →Bool και
τις υπο-συνθήκη εξισώσεις (∀∅)empty?(true) = true, (∀B.Buf ) empty?(take(B)) =
true αν empty?(B) = true κ.ο.κ. Με Γ = {put, get, take, empty?}. Θα δείξουμε
ότι οι τελεστές put και empty? είναι συμπεριφοριακά διατηρητικοί για την ≡Σ,Γ0 όπου
Γ0 = Γ\ {put, empty?} δηλαδή Γ0 = {get, take}.
΄Εστω λοιπόν μία Σ-άλγεβρα Α τέτοια ώστε να είναι μοντέλο της προδιαγραφής
Buf10 = (, 0 , E), για να δείξουμε ότι ο τελεστής empty? είναι συμπεριφοριακά διατηρητικός
πρέπει να δείξουμε ότι ∀b, b0 ∈ ABuf αν b ≡Σ,Γ0 b0 τότε empty?(b) ≡Σ,Γ0 empty?(b0 ).
Αφού b ≡Σ,Γ0 b0 και το Aget ορίζει ένα ορατό περιεχόμενο τότε θα ισχύει ότι Aget (b) =
Aget (b0 ). Αν τώρα Aget (b) = Aerr = Aget (b0 ) τότε από την εξίσωση εμπτψ;(Β) =
τρυε ιφ γετ(Β) = ερρ θα έχουμε ότι Aempty? (b) = Aempty? (b0 ) = Atrue . Αλλιώς, αν
Ag et(b) 6= Aerr τότε Aempty? (b) = Aempty? (b0 ) = Af alse από την εξίσωση γετ(Β) =
ερρ ιφ εμπτψ;(Β). Ανάλογα μπορούμε να και για τον τελεστή put.
΄Ετσι μπορούμε να χρησιμοποιήσουμε την Γ΄-ισοδυναμία στη θέση της Γ, γεγονός
που απλουστεύει την απόδειξη των συμπεριφοριακών ιδιοτήτων.
Με βάση τα προηγούμενα αποτελέσματα μπορούμε να ορίσουμε κάποιες σχέσεις
μεταξύ Σ-προδιαγραφών.
Ορισμός. ΄Εστω B1 και B2 όπως στο προηγούμενο παράδειγμα μόνο που εδώ
έχουμε ότι Γ1 ⊆ Γ2 και υποθέτουμε ότι οι Σ-εξισώσεις του Ε δεν έχουν συνθήκες
για κρυφούς τύπους. Τότε οι προδιαγραφές B1 και B2 είναι ισοδύναμες ανν όλοι οι
τελεστές του Γ2 είναι συμπεριφοριακά διατηρητικοί για την B1 .
94
Πριν κλείσουμε αυτή την εισαγωγή στις έννοιες της κρυφή άλγεβρας θα πρέπει
να αναφερθούμε λιγάκι στο κατα πόσο η προσέγγιση αυτή μπορεί να χρησιμοποιηθεί
για τη περιγραφή μη-ντετερμινιστικών συστημάτων. Τα σημερινά συστήματα υπολο-
γιστών βασίζονται όλο και περισσότερο σε αρχιτεκτονικές δικτύων για να επιτύχουν
τους σκοπούς τους. Παρόλ΄ αυτά επειδή οι κόμβοι ενός δικτύου εν γένει δεν εί-
ναι δυνατόν να γνωρίζουν ποια είναι η κατάσταση των άλλων κόμβων του δικτύου,
είναι απαραίτητο ο φορμαλισμός τέτοιων συστημάτων να μπορεί να υποστηρίξει έν-
νοιες όπως ο μη-ντετερμινισμός με απλό και φυσικό τρόπο ώστε να είναι εφαρμόσιμος
από τους μηχανικούς του λογισμικού. Δυστυχώς οι περισσότεροι διαθέσιμοι λογισμοί
εισάγουν την έννοια του μη-ντετερμινισμού με σύνθετους και αφύσικους τρόπους.
Στο πλαίσιο της κρυφής άλγεβρα η έννοια του μη-ντετερμινισμού είναι ήδη φυσικά
ενσωματωμένη στο φορμαλισμό. Μη-ντετερμινισμό έχουμε οποτεδήποτε οι τιμές ενός
ορατού τελεστή δεν είναι ορισμένες από τη προδιαγραφή. Για να κατανοήσουμε
καλύτερα αυτή την εισαγωγή του μη-ντετερμινισμού είναι χρήσιμο να θεωρήσουμε τα
μοντέλα (τις Σ-άλγεβρες δηλαδή) μία Σ-προδιαγραφής ως «πιθανούς κόσμους» στους
οποίους διαφορετικοί συνδυασμοί αυτών των μη ντετερμινιστικών επιλογών μπορεί να
εμφανιστούν σε διαφορετικούς κόσμους. Βέβαια κάθε τέτοιο μοντέλο είναι ντετερμιν-
ιστικό, απλά δεδομένης μίας Σ-προδιαγραφής μπορεί να υπάρχουν πολλά διαφορετικά
μοντέλα που την ικανοποιούν. Στη συνέχεια θα ορίσουμε τυπικά αυτές τις έννοιες.
Τηεορψ, ΝΔΣΤΑ῝Κ
ηιδδεν σορτ, σταςκ
οπερατιονς, εμπτψ : -᾿ σταςκ
πυση : σταςκ -᾿ σταςκ
ποπ : ποπ -᾿ σταςκ
τοπ : σταςκ -᾿ Νατ
αξιομς: φοραλλ Σ.σταςκ,
ποπ πυση Σ = Σ
ποπ εμπτψ = εμπτψ
97
S−οικογένεια a συναρτήσεων au,s : Σu,s → [Au → As ] για u ∈ S∗ και s ∈ S, όπου
As1...sn = As1 × . . . × Asn και [A → b] δηλώνει το σύνολο όλων των συναρτήσεων
από το A στο B. Για u = s1 . . . sn , σ ∈ Σu,s και (a1 , . . . , an ) ∈ Au θα γράφουμε
(a1 , ..., an ) αντί για au,s (σ) (a1 , . . . , an ).
΄Εστω μια χαρακτηριστική Σ, τότε ένας Σ−ομομορφισμός από μια Σ−άλγεβρα
hA, ai σε μια άλλη Σ−άλγεβρα hA0 , a0 i είναι μια S−οικογένεια f : A → A0 έτσι ώστε
για κάθε σ ∈ Σu,s και κάθε a = (a1 , . . . , an ) ∈ Au να ισχύει η εξής συνθήκη
ομομορφισμού:
Η κατηγορία AlgΣ των Σ−αλγεβρών έχει τις Σ−άλγεβρες ως αντικείμενα και τους
Σ−ομομορφισμούς ως μορφισμούς.
Alg (φ) (h0 ) = h : Alg (φ) (A0 ) → Alg (φ) (B 0 ) οριζόμενο μέσω hs = hf (s).
Πολλές φορές συμβολίζουμε με φ (A0 ) την Alg (φ) (A0 ) και με φ (h0 ) τον Alg (φ) (h0 ).
΄Εστω S το σύνολο των τύπων μιας χαρακτηριστικής Σ, τότε υπάρχει ένας συναρτητής
πουξεχνάει (φοργετφυλ φυνςτορ) U : AlgΣ → SetS , ο οποίος στέλνει κάθε
άλγεβρα στην S−οικογένεια φορέων της, και κάθε Σ−ομομορφισμό στην αντίστοιχη
S−οικογένεια απεικονίσεων.
Για κάθε S−σύνολο με δείκτες Q, μπορούμε να ορίσουμε μια ελεύθερη άλγε-
βρα, ή άλγεβρα όρων, που θα συμβολίζουμε με TΣ (Q), όπου |TΣ (X)|s αποτελείται
από όλους τους Σ−όρους τύπου s με μεταβλητές από το Q, δηλαδή κάθε φορέας
(TΣ (X))s αποτελείται από όλους τους όρους τύπου s που χρησιμοποιούν μεταβλητές
από το Q και κατασκευάζονται με τη βοήθεια τελεστών από το Σ. Το S−σύνολο
με δείκτες TΣ (X) σχηματίζει μια Σ−άλγεβρα. Ορίζουμε τους φορείς (TΣ )s ως το
ελάχιστο σύνολο από αλυσίδες συμβόλων τέτοιο ώστε:
Αντί για Eqn (φ) (e) θα γράφουμε πολλές φορές απλά φ (e).
Ορισμός. Μια χαρακτηριστική Σ αποτελείται από ένα σύνολο τύπων S και μια
οικογένεια {Σω,s |ω ∈ Σ∗ , s ∈ S} από σύνολα τελεστών.
Φιγυρε 0.0.36
Φιγυρε 0.0.37
Φιγυρε 0.0.38
subsort t1 < t2
Τα σύνολα που αντιστοιχούν στους τύπους t1 και t2 σχετίζονται με τη σχέση του
περιέχεσθαι. Π.χ.
Σ-΄Αλγεβρες.
AV ar × AExp → AP gm
είναι η συνάρτηση που ερμηνεύει τον τελεστή που χρησιμοποιήσαμε ως παράδειγμα:
AV ar :το σύνολο των αντικειμένων με τύπο V ar
AExp :το σύνολο των αντικειμένων με τύπο Exp (το σύνολο των εκφράσεων)
AP gm :το σύνολο των αντικειμένων με τύπο P gm (το σύνολο των προγραμμάτων)
΄Εστω μια χαρακτηριστική Σ με σύνολο τύπων S· μια Σ−άλγεβρα A αποτελείται
από σύνολα φορέων (ςαρριερ σετ) AS για κάθε τύπο s ∈ S, μαζί με μια συνάρτηση
Aσ : As1 × . . . × Asn → As
AN at =ω= {0, 1, 2, . . .}
A0 = 0
As (n) = n + 1
102
Η παραπάνω ερμηνεία δεν είναι όμως η μοναδική. Ιδού τα εξής παραδείγματα:
Ας ορίσουμε την άλγεβρα B ως εξής
BN at = {0, 1}
B0 = 0
Bs (n) = 1−n
CN at = {0}
C0 = 0
Cs (0) = 0
΄Οροι. Το σύνολο των Σ−όρων τύπου S, συμβολικά TΣ,s για s ∈ S ορίζεται από
τις εξής δύο συνθήκες:
TΣ = (TΣ,s )s∈S
όπου TΣ η αρχική άλγεβρα στην κατηγορία των Σ−αλγεβρών (ονομάζεται άλγεβρα
όρων).
Το TΣ είναι άλγεβρα ως εξής:
s → (TΣ )s
σ ∈ Σ[],s → σ ∈ TΣ,s
σ ∈ Tω,s : (t1 , . . . , tn ) → σ (t1 , . . . , tn )
(ss0) ∗ (ss0)
(ss0) + ((s0) ∗ (sss))
(ss ((ss0) ∗ (ssss0))) + ((sss0 ∗ (sss0)))
Θs : (TΣ∪Ξ )s → As
δηλαδή
(1) Θs (X) = Θ (X) για X στο Ξ[],,s και Θs (c) = Ac για c στο Σ[],,s .
(2) ΄Εστω σ ∈ Σs1 ,...,sn,s και ti ∈ TΣ,si με Θ (ti ) = ai για i = 1, . . . , n, τότε
Θ (σ (t1 , . . . , tn )) = Aσ (a1 , . . . , an )
Θ : TΣ∪Ξ → A
Ορισμός. ΄Εστω μια Σ−εξίσωση e της μορφής (∀Ξ) t = t0 και μια Σ−άλγεβρα
A. Λέμε ότι η A ικανοποιεί την e αν και μόνο αν Θ (t) = Θ (t0 ) για κάθε ερμηνεία
Θ : Ξ → A.
X ∗Z == Y ∗Z
Z =/= 0
104
Μια Σ−εξίσωση υπό συνθήκη αποτελείται από τρεις Σ−όρους, έστω t1 , t2 , t3 με
μεταβλητές από κάποια χαρακτηριστική Ξ που αποτελείται μόνο από σταθερές, έτσι
ώστε οι σταθερές να είναι του ιδίου τύπου t1 , t2 και t3 να είναι τύπου Bool
(∀Ξ) t1 = t2 if t3
Μια Σ−εξίσωση και συνθήκη ικανοποιείται από μια Σ−άλγεβρα A αν και μόνο αν
για κάθε αντικατάσταση Θ : Ξ → A έχουμε ότι Θ (t1 ) = Θ (t2 ) όταν Θ (t3 ) = true.
th GROU P
sort Elt
op e :→ Elt
−1
op : Elt → Elt
op : Elt Elt → Elt
vars X, Y, Z : Elt
eq X ∗e=X
eq X ∗ (X − 1) = e
eq (X ∗ Y ) ∗ Z = X ∗ (Y ∗ Z)
endth
΄Εστω HCL (Ω) το σύνολο όλων των Ω−προτάσεων Ηορν, δηλαδή η διακριτή
ένωση των συνόλων HCLX (Ω) από κλειστές (Ω, X) Γπροτάσεις.
108
ΕΦΑΡΜΟΓΕΣ: ΟΙ ΑΛΓΕΒΡΙΚΕΣ
ΠΡΟΔΙΑΓΡΑΦΕΣ
Τμήματα. Στο προηγούμενο κομμάτι του κώδικα με τη λέξη κλειδί mod δηλώ-
νουμε την αρχή μίας προδιαγραφής που θα βρίσκεται μέσα στο σώμα του mod, δηλαδή
ανάμεσα από τα «». Ο χαρακτήρας ! ή * μετά από τη λέξη κλειδί mod δηλώνει ότι η
προδιαγραφή που θα ακολουθήσει θα έχει είτε πρωταρχική είτε ’χαλαρή’ σημασιολογία
(δηλαδή θα δηλώνει όλα τα μοντέλα που ικανοποιούν την προδιαγραφή και όχι μόνο
τα ισομορφικά με το πρωταρχικό μοντέλο).
Τύποι. Τα ονόματα των τύπων που ορίζει η προδιαγραφή δηλώνονται μέσα σε
αγκύλες (π.χ. [SN at]). ΄Ενα σύμβολο <, ανάμεσα στα ονόματα δύο τύπων δηλώνει
ότι ο ένας είναι υποτύπος του άλλου.
Τελεστές. Η λέξη κλειδί op ξεκινά τη δήλωση ενός τελεστή του οποίου το πεδίο
ορισμού δηλώνεται πριν την άνω και κάτω τελεία και ο τύπος του συνόλου τιμών μετά
το βέλος. Συνήθως τον τύπο του συνόλου τιμών μαζί με αυτόν του πεδίου ορισμού
τους ονομάζουμε τάξη (rank) του τελεστή. Η γλώσσα υποστηρίζει την δήλωση δι-
αφόρων ιδιοτήτων των τελεστών μέσα σε {} με τη χρήση διαφόρων λέξεων κλειδιών,
για παράδειγμα η δήλωση ότι ο τελεστής είναι αντιμεταθετικός γίνεται χρησιμοποιών-
τας τη λέξη κλειδί assoc.
Εξισώσεις. Η λέξη κλειδί eq σηματοδοτεί την έναρξη του ορισμού μίας εξίσωσης,
στην οποία το δεξί της μέρος δηλώνεται πριν από το σύμβολο ’=’ ενώ το αριστερό
μετά από αυτό. Το τέλος της δήλωσης μιας εξίσωσης σηματοδοτείται από μία τελεία
’.’.
Μεταβλητές. Οι μεταβλητές δηλώνονται χρησιμοποιώντας τη λέξη κλειδί var ακολου-
θούμενη από το όνομα της μεταβλητής, μία άνω και κάτω τελεία και το τύπο της
μεταβλητής. Είναι δυνατόν να συμπτύξουμε τους ορισμούς πολλών μεταβλητών ίδιου
τύπου σε μία γραμμή χρησιμοποιώντας τη λέξη κλειδί vars. ΄Ετσι για παράδειγμα η έκ-
φραση vars N M : SNat σηματοδοτεί τη δήλωση δύο μεταβλητών με ονόματα N, M
που είναι τύπου SN at. Ακόμα είναι δυνατό να χρησιμοποιήσουμε σε μία εξίσωση
μεταβλητές που δεν έχουν οριστεί προηγουμένως, απλά δηλώνοντας το τύπο και το
όνομα της μεταβλητής μέσα στην εξίσωση. Αυτή η μεθοδολογία καλείται επιτόπου
109
δήλωση μεταβλητών. ΄Ετσι οι ακόλουθες δύο εξισώσεις έχουν ταυτόσημη σημασι-
ολογία: var N : SNat . eq (s(N) = 0) = false . και eq (s(N: SNat) =
0) = false .
Εξισώσεις υπό συνθήκη. Ακόμα η δήλωση μίας υπό-συνθήκης εξίσωσης γίνεται
με τη χρήση της κωδικής λέξης ceq, που ακολουθείται από μία εξίσωση στο τέλος
της οποίας βρίσκεται μία έκφραση της μορφής if P , όπου P είναι κάποιο κατηγόρημα.
΄Ετσι για παράδειγμα η δήλωση ceq (S(M) = S(N)) = true if (M = N) ορίζει
ότι ο όρος S(N ) είναι ίσος με τον όρο S(M ) αν οι όροι M, N είναι ίσοι (όπου Μ,Ν
μεταβλητές του ίδιου τύπου).
Ισότητες. Τέλος στη γλώσσα ορίζονται δύο ειδών ισότητες μέσω δύο κατηγορημάτων.
Ο πρώτος τελεστής ισότητας ορίζεται ως = , ενώ ο δεύτερος ως ==. Και οι δύο
τελεστές επιστρέφουν true αν τα δύο τους ορίσματα μπορούν να αναγραφούν (με βάση
το σύστημα αναγραφής της γλώσσας) στο ίδιο όρο. Αλλά ο όρος L : S == L0 : S
επιστρέφει f alse αν ο L αναγράφεται σε t1 και ο L0 σε t2 ενώ ο ορός L : S = L0 : S
θα επιστρέψει t1 = t2.
Σχόλια. Τέλος οι γραμμές που αρχίζουν με −− αποτελούν σχόλια και αγνοούνται
από τη μηχανή.
Θα εξετάσουμε τώρα εν συντομία πώς η γλώσσα υποστηρίζει τα διάφορα χαρακ-
τηριστικά που αναφέραμε προηγουμένως.
Σύστημα τύπων. Το σύστημα τύπων της Caf eOBJ είναι βασισμένο στην
άλγεβρα με πολλούς τύπους και διάταξη (ΑΤΔ) έτσι επιτρέπει τον ορισμό υποτύπων.
Αυτό προσφέρει αυστηρό έλεγχο των τύπων της προδιαγραφής καθώς και μία μεθοδολογία
για τον χειρισμό σφαλμάτων βασισμένη σε αυτό. Ακόμα αυτό το σύστημα επιτρέπει
συντακτική ευελιξία στη γλώσσα συγκρίσιμη με αυτή των γλωσσών χωρίς τύπους ενώ
ταυτόχρονα διατηρεί όλα τα πλεονεκτήματα των τύπων. Η Caf eOBJ δεν επιτρέπει
τον απευθείας ορισμό μερικών τελεστών. Για να μπορέσουμε να ορίσουμε τέτοιους
τελεστές μπορούμε να χρησιμοποιήσουμε το σύστημα των υποτύπων που μας προσ-
φέρει η γλώσσα. Για παράδειγμα αν επιθυμούσαμε να ορίσουμε μια προδιαγραφή για
τη δομή της στοίβας στην οποία δεν επιτρέπεται η εξαγωγή στοιχείου από την κενή
στοίβα (δηλαδή ο τελεστής pop να είναι μερικά ορισμένος), τότε θα μπορούσαμε να το
επιτύχουμε με την παρακάτω προδιαγραφή:
mod* Elt{
[Elt < EltErr]
op err : -> EltErr
op _=_ : Elt Elt -> Bool {comm}
eq (E:Elt = E) = true .
eq (E:Elt = err) = false .
111
}
• O, είναι ένα σύνολο από πειράματα, κάθε τέτοιο πείραμα, o ∈ O, ορίζει μία
συνάρτηση o : Y → D όπου D είναι κάποιος τύπος δεδομένων που μπορεί να
είναι διαφορετικός για κάθε πείραμα. Δεδομένου τώρα ενός ΣΠΜ και δύο
καταστάσεων u1 , u2 ∈ Y η ισότητα ανάμεσα σε αυτές τις δύο καταστάσεις,
συμβολίζεται ως u1 =S u2 , και ορίζεται ως ∀o ∈ O.o(u1 ) =D o(u2 ) όπου
=D συμβολίζει την ισότητα ανάμεσα σε όρους του ίδιου τύπου δεδομένων
D.
• I, αποτελεί ένα υποσύνολο του συνόλου όλων των πιθανών καταστάσεων
του συστήματος, Y , το οποίο συνήθως ονομάζουμε σύνολο των αρχικών
καταστάσεων.
• T , ένα σύνολο από υπό-συνθήκη κανόνες μετάβασης. Κάθε τέτοιος κανόνας
τ ∈ T ορίζει μία συνάρτηση πάνω στις κλάσεις ισοδυναμίας του χώρου των
καταστάσεων με βάση το ΣΠΜ, (Y /=S ). Στη συνέχεια με τ (u) θα συμβο-
λίζουμε οποιοδήποτε από τα στοιχεία του τ [u], δηλαδή όλες τις ισοδύναμες
με τη u καταστάσεις στις οποίες εφαρμόζουμε τον κανόνα μετάβασης τ .
Τότε η τ (u) θα καλείται η διάδοχος κατάσταση της u με βάση τον κανόνα
τ . Ακόμα μαζί με κάθε κανόνα μετάβασης ορίζεται και μία συνθήκη που τη
114
συμβολίζουμε συνήθως ως c-τ η οποία είναι στη πραγματικότητα ένα κατη-
γόρημα πάνω στις καταστάσεις του Y τέτοιο ώστε να ισχύει ότι τ (u) =S u
αν ¬c-τ (u).
΄Ενα ΣΠΜ μπορεί να περιγραφεί με φυσικό τρόπο στη Caf eOBJ. Τα πειράματα α-
ναπαριστώνται από τελεστές παρατήρησης στη Caf eOBJ και οι κανόνες μετάβασης
με συμπεριφοριακούς τελεστές της Caf eOBJ με κρυφό τύπο. Συνήθως οι παρατη-
ρήσεις αυτές και οι κανόνες μετάβασης είναι παραμετρικοί, και σε αυτή τη περίπτωση
υποθέτοντας ότι υπάρχουν Dk με k = i1 , . . . , im , j1 , . . . , jn τους συμβολίζουμε ως
oi1 , . . . , oim και τj1 , . . . , τjn όπου m, n ≥ 0 αντίστοιχα. Για παράδειγμα ένα πείραμα
που επιστέφει το στοιχείο στη θέση n ∈ N ενός πίνακα θα μπορούσε να συμβολιστεί
ως on και ένας κανόνας μετάβασης που αυξάνει κατά x την τιμή του στοιχείο αυτό
θα μπορούσε να συμβολιστεί ως incn,x . Δεδομένου τώρα ενός ΣΠΜ θα αποκαλούμε
εκτέλεση μια άπειρη ακολουθία από καταστάσεις u0 , . . . , un , . . . οι οποίες ικανοποιούν
τις ακόλουθες συνθήκες:
• (Αρχικοποίηση) u0 ∈ I
• (Διαδοχή) για κάθε i ∈ {0, 1, . . . } ui+1 =S τ (ui ), για κάποιο τ ∈ T ,
δηλαδή όλες οι καταστάσεις προκύπτουν από την προηγούμενη κατάσταση
της ακολουθίας εφαρμόζοντας κάποιο κανόνα μετάβασης.
Θα λέμε ότι μία κατάσταση είναι προσβάσιμη (reachable) ανν εμφανίζεται ως μέρος
κάποιας εκτέλεσης του S. Με RS θα συμβολίζουμε το σύνολο όλων των προσβάσιμων
καταστάσεων του S. Μια ιδιότητα θα καλείται αναλλοίωτη (invariant), όσο αφορά
το S, ανν ισχύει για όλες τις προσιτές καταστάσεις του S. Τυπικά αυτό συμβολίζεται
ώς:
invariant(p) ανν (∀u ∈ I, p(u)) και (∀u ∈ RS ∧ τ ∈ T .p(u) → p(τ (u)))
Ας δούμε τώρα πώς περιγράφουμε ένα ΣΠΜ στην Caf eOBJ. Το σύνολο των
καταστάσεων περιγράφεται από ένα κρυφό τύπο, H. ΄Ενα πείραμα oi1 ,...,im ∈ O όπως
είπαμε με ένα τελεστή παρατήρησης. Υποθέτουμε ότι οι τύποι δεδομένων που θα
χρειαστούμε οι Di1 , . . . Dim και D έχουν προδιαγραφεί σαν πρωταρχικές άλγεβρες
έτσι ώστε να υπάρχουν οι αντίστοιχοι ορατοί τύποι Vi1 , . . . Vim και V . Τότε:
• Ο τελεστής της CafeOBJ που αντιστοιχεί στο πείραμα oi1 ,...,im ορίζεται ως,
βοπ ο : Η Vi1 . . . Vim -> V
• κάθε αρχική κατάσταση u ∈ I αναπαρίσταται από μία κρυφή σταθερά op uinit :
− > H. Αν η τιμή του oi1 ,...,im στην αρχική κατάσταση u ορίζεται ώς
f (i1 , . . . , im ) τότε αυτό ορίζεται στην CafeOBJ ως o(ui nit, Xi1 , . . . , Xim ) =
f (Xi1 , . . . Xim ) όπου Xi1 , . . . , Xim είναι μεταβλητές τύπων Vi1 , . . . Vim α-
ντίστοιχα ορισμένες στη CafeOBJ.
115
• ένας κανόνας μετάβασης τj1 ,...,jn αναπαρίσταται από μία μέθοδο στη Caf eOBJ,
bop a : H Vj1 . . . , Vjn − > H. Αν ένας κανόνας μετάβασης εφαρμοστε-
ί σε μία κατάσταση όπου η συνθήκη του ισχύει η τιμή ενός πειράματος
του ΣΠΜ, έστω oi1 ,...,im , μπορεί να αλλάξει το οποίο περιγράφεται στην
Caf eOBJ με μία εξίσωση, ceq o(a(u, Xj1 , . . . , Xjn )), (Xi1 , . . . , Xim ) =
c − a(u, Xj1 , . . . , Xjn , Xi1 , Xim ) if c − a(u, Xj1 ,...,Xjn ). Τέλος αν ένας
κανόνας a εφαρμοστεί σε μία κατάσταση στην οποία δεν ισχύει η συνθήκη
του τότε η νέα κατάσταση πρέπει να είναι ισοδύναμη με τη προηγούμενη
όσο αφορά την =S . Αυτό δηλώνεται στη Caf eOBJ πάλι με μία εξίσωση,
ceqa(u, Xj1 ,...,Xjn ) = u if not c-α(υ,Xj1 , . . . , Xjn ).
Για παράδειγμα ας υποθέσουμε ότι επιθυμούμε να αποδείξουμε ότι η ιδιότητα pred1(s, x1)
η οποία είναι γραμμένη σε όρους της Caf eOBJ είναι αναλλοίωτη για μία προδια-
γραφή ΣΠΜ γραμμένη πάλι σε όρους της Caf eOBJ, όπου s είναι μια ελεύθερη
μεταβλητή τύπου των καταστάσεων του συστήματος και x1 ένα σύνολο από ελε-
ύθερες πάλι μεταβλητές. Συχνά δεν είναι δυνατόν να καταφέρουμε την απόδειξη ε-
νός κατηγορήματος χρησιμοποιώντας μόνο τους κανόνες αναγραφής που έχουμε ανα-
πτύξει. Εξαιτίας όμως της δομή μίας ΣΠΜ μπορούμε να χρησιμοποιήσουμε επαγωγή
116
(induction) στις καταστάσεις για να δείξουμε ότι η ιδιότητα pred1(s, x1) είναι αναλ-
λοίωτη. Αυτό γίνεται δείχνοντας ότι η ιδιότητα ισχύει για κάθε αρχική κατάσταση,
∀u ∈ I.pred(u, x1), και στη συνέχεια υποθέτοντας ότι ισχύει για την τυχαία κατάστα-
ση s δείχνουμε οτι ισχύει για κάθε διαδοχική κατάσταση για κάθε κανόνα μετάβασης,
∀τ ∈ T .pred1(s, x1) → pred1(τ (s), x1). Τις περισσότερες φορές όμως η απόδειξη
του pred1(s, x1) χρησιμοποιώντας μόνο επαγωγή είναι αδύνατη. Παρόλ΄ αυτά είναι
δυνατή η απόδειξη ότι το pred1 μαζί με άλλα n-1 κατηγορήματα είναι αναλλοίωτα για
τη ΣΠΜ προδιαγραφή (αυτά τα κατηγορήματα θα τα συμβολίζουμε με pred2(s, x2),
. . . , predn(s, xn)). Για παράδειγμα έστω ότι κατά την επαγωγική απόδει-
ξη του pred1(s, x1) προσπαθούμε να δείξουμε ότι ισχύει το επαγωγικό βήμα για τον
κανόνα μετάβασης τ , δηλαδή ότι: pred1(s, x1) → pred1(τ (s), x1). Πολλές φορές η
απόδειξη αυτή είναι αδύνατη, αλλά παρόλ΄ αυτά μπορούμε να αποδείξουμε τη διατήρηση
της ιδιότητας από το κανόνα μετάβασης χρησιμοποιώντας μία πιό ισχυρή υπόθεση για
παράδειγμα: pred1(s, x1) ∧ predi(s, xi) ∧ · · · ∧ predj(s, xj) → pred1(τ (s), x1), όπου
1 ≤ i, j ≤ n. Επιπλέον είναι δυνατόν η απόδειξη των επιπλέον κατηγορημάτων να
είναι επίσης αδύνατη χωρίς τη χρήση των υπολοίπων. Δηλαδή να μπορούμε να δείξου-
με μόνο ότι: pred1(s, x1) ∧ predi(s, xi) ∧ · · · ∧ predj(s, xj) → predi(τ (s), xi), όπου
1 ≤ i, j ≤ n. Θα συμβολίζουμε αυτή την ισχυροποιημένη υπόθεση ώς SHi . Ακόμα για
την απόδειξη των pred1(s, x1)∧predi(s, xi)∧· · ·∧predj(s, xj) → pred1(τ (s), x1), τις
περισσότερες φορές χρειάζεται να διακρίνουμε περιπτώσεις (Case Splitting). Δη-
λαδή, η κατάσταση s να διακριθεί σε l υποκαταστάσεις οι οποίες να ορίζονται από τις
φόρμουλες casek , 1 ≤ k ≤ l ώστε να είναι εξαντλητικές, δηλαδή: (case1 ∨· · ·∨casel ) =
true. Με αυτό το τρόπο η απόδειξη του pred1(s, x1)∧predi(s, xi)∧ . . . ∧predj(s, xj)
→ predi(τ (s), xi) ¨σπάει’ σε l αποδείξεις:
casei1 ∧ pred1(s, x1) ∧ predi(s, xi) ∧ · · · ∧ predj(s, xj) → predi(τ (s), xi)
...
caseil ∧ pred1(s, x1) ∧ predi(s, xi) ∧ · · · ∧ predj(s, xj) → predi(τ (s), xi)
Δηλαδή αντί να δείξουμε ότι η ιδιότητα pred1(s, x1) είναι αναλοίωτη δείχνουμε ότι
η ιδιότητα pred1(s, x1) ∧ pred2(s, x2) ∧ · · · ∧ predn(s, xn) είναι αναλλοίωτη. Η με-
θοδολογία αυτή καλείται ταυτόχρονη επαγωγή (Simultaneous Induction) και είναι
η κύρια μεθοδολογία απόδειξης μίας αναλλοίωτης ιδιότητας για μια ΣΠΜ/CafeOBJ
προδιαγραφής. Προφανώς αν μπορούμε να αποδείξουμε τη σύζευξη τότε ισχύει και το
pred1(s, x1). Τα κατηγορήματα pred2(s, x2), . . . , predn(s, xn)) θα τα
λέμε λήμματα. Ακόμα θα συμβολίσουμε με pred(s, x1, ..., xn) τη σύζευξη των κατη-
γορημάτων.
Υλοποίηση των Proof Scores στην CafeOBJ. Θα δούμε τώρα πώς μπορούμε
να ορίσουμε μία τέτοια απόδειξη στη Caf eOBJ. Πρώτα ορίζουμε ένα module το
οποίο συνήθως το καλούμε IN V όπου τα κατηγορήματα εκφράζονται με όρους της
CafeOBJ.
117
module INV{
op inv1 : H V1 -> Bool
· · ·
op invn : H Vn -> Bool
eq inv1(W,X1) = pred1(W,X1) .
· · ·
eq invn(W,Xn) = predn(W,Xn) .
}
όπου W είναι μια Caf eOBJ μεταβλητή του τύπου ΣΠΜ και Xn ένα σύνολο από
Caf eOBJ μεταβλητές για τις xi. Τέλος ο όρος predn(W, Xi) εκφράζει σε όρους
της γλώσσας το κατηγόρημα predn(s, xn). Επίσης στο module δηλώνουμε σταθερές
xi , (i = 1, . . . , n) που είναι του ίδιου τύπου με τα Xi. Στο σώμα μίας απόδειξης μία
σταθερά χρησιμοποιείται για να δηλώσει ένα τυχαίο αντικείμενο του συγκεκριμένου
τύπου. Για παράδειγμα αν δηλώσουμε μια σταθερά τύπο N at την x η x μπορεί να χρη-
σιμοποιηθεί για να σηματοδοτήσουμε ένα τυχαίο φυσικό αριθμό. Μέσω αυτών των
σταθερών και χρησιμοποιώντας κατάλληλες εξισώσεις μπορούμε να κάνουμε τον δια-
χωρισμό των καταστάσεων που αναφέραμε προηγουμένως. Για παράδειγμα αν θέλουμε
να θεωρήσουμε δύο καταστάσεις στις οποίες ένας τυχαίος φυσικός είναι μεγαλύτερος
από το μηδέν στη μία και μικρότερος, ίσος στην άλλη θα μπορούσαμε να το δηλώσουμε
με τις ακόλουθες εξισώσεις:
eq (x > 0) = true .
eq (x <= 0) = true .
Είμαστε τώρα σε θέση να περιγράψουμε το proof score του i-οστού κατηγορήματος.
΄Εστω ότι init είναι μια σταθερά η οποία συμβολίζει μια τυχαία αρχική κατάσταση του
συστήματος. Το μόνο που χρειάζεται να κάνουμε για να δείξουμε ότι το κατηγόρημα
predi(s, xi) ισχύει σε κάθε αρχική κατάσταση είναι να γράψουμε τον ακόλουθο κώδικα
στη Caf eOBJ:
open INV
red invi(init, xi) .
close
Στη συνέχεια γράφουμε ένα module, το οποίο συνήθως το συμβολίζουμε με IST EP ,
στο οποίο δηλώνουμε δύο σταθερές την s και την s0 , οι οποίες αντιστοιχούν σε μία
τυχαία κατάσταση του ΣΠΜ και στην διαδοχική της, δηλαδή στην επόμενη κατάσταση
από την s μετά από την εφαρμογή κάποιου κανόνα μετάβασης. Τα κατηγορήματα που
πρέπει να αποδείξουμε στην περίπτωση αυτή είναι:
op istep1 : V1 -> Bool
· · ·
op istepn : Vn -> Bool
118
eq istep1(X) = inv1(s,X1) implies inv1(s’,X1) .
· · ·
eq istepn(X) = invn(s,Xn) implies invn(s’,Xn) .
Σε κάθε περίπτωση επαγωγής (δηλαδή για κάθε κανόνα μετάβασης) η κατάσταση
συνήθως διαχωρίζεται όπως είπαμε σε υποκαταστάσεις. Για παράδειγμα έστω ότι
προσπαθούμε να αποδείξουμε ότι κάποιος κανόνας μετάβασης διατηρεί το κατηγόρημα
i. Συνήθως λοιπόν διαχωρίζουμε την κατάσταση σε l-υποκαταστάσεις, casei με 1 ≤
i ≤ l. Τότε, ο ακόλουθος κώδικας στη Caf eOBJ δείχνει ότι η υποκατάσταση casei
για τον κανόνα μετάβασης a διατηρεί την ιδιότητα:
open ISTEP
Declare constants denoting arbitrary objects.
Declare equations denoting casei .
Declare equations denoting facts if necessary.
eq s’ = a(s, y) .
red istepi(xi) .
close
όπου y είναι μία λίστα σταθερών οι οποίες χρησιμοποιούνται ως ορίσματα για τον
κανόνα μετάβασης a, με βάση τον ορισμό του στην Caf eOBJ, και δηλώνουν τυχα-
ία αντικείμενα κατάλληλων τύπων. Επιπλέον, άλλες σταθερές μπορεί να χρειαστεί
να ορισθούν μαζί με κατάλληλες εξισώσεις έτσι ώστε να γίνει ο διαχωρισμός των
καταστάσεων όπως εξηγήσαμε προηγουμένως. Ακόμα κάποιες προτάσεις μπορεί να
χρειασθεί να δηλωθούν ως γεγονότα (μέσω εξισώσεων). Αυτές οι προτάσεις αφορούν
λήμματα στη πραγματικότητα σχετικά με τις δομές δεδομένων που χρησιμοποιούμε και
όχι το ΣΠΜ (Προφανώς για να είναι ορθή η απόδειξή μας αυτά τα λήμματα πρέπει να
έχουν προηγουμένως αποδειχθεί ανεξάρτητα). Τέλος, οι εξισώσεις που έχουν το s0
στο αριστερό τους μέρος χρησιμοποιούνται για να ορίσουμε τη διαδοχική κατάσταση
της s, δηλαδή την κατάσταση μετά την εφαρμογή του κανόνα μετάβασης a. Αν ο όρος
istepi(xi) αναγραφεί σε true έχουμε αποδείξει ότι ο κανόνας μετάβασης διατηρεί το
κατηγόρημα predi(p, x) για την υπό-περίπτωση j. Αν, ο όρος δεν αναγραφεί σε true
τότε μπορεί να πρέπει να δυναμώσουμε την επαγωγική μας υπόθεση. ΄Εστω λοιπόν
ότι SIHi είναι ο όρος της Caf eOBJ που αναπαριστά τον SIH για το κατηγόρημα
i. Τότε, αντί για το όρο istepi(xi) αποδεικνύουμε τον ακόλουθο:
open ISTEP
Declare constants denoting arbitrary objects.
Declare equations denoting casei .
Declare equations denoting facts if necessary.
119
eq s’ = a(s, y) .
red SIHi implies istepi(xi).
close
Με αυτό τον τρόπο μπορούμε να αποδείξουμε όλα τα κατηγορήματα. Στη περίπτωση
που ένα κατηγόρημα αναγραφεί σε f alse τότε υπάρχουν δύο περιπτώσεις οι οποίες
πρέπει να εξετάσουμε: Η υποκατάσταση που επέστρεψε f alse δεν είναι προσιτή για
το σύστημά μας. Τότε πρέπει να ενδυναμώσουμε την επαγωγική μας υπόθεση με
ένα λήμμα το οποίο να εκφράζει ακριβώς αυτό και έτσι ο όρος red SIHi implies
istepi(xi) θα αναγραφεί επιτυχώς σε true. Η δεύτερη περίπτωση είναι η υποκα-
τάσταση να είναι προσιτή. Τότε, αυτό σημαίνει ότι η ιδιότητα που επιθυμούμε να
αποδείξουμε δεν είναι αναλλοίωτη και άρα πρέπει να επανασχεδιασθεί το σύστημά
μας.
120
LISP
Για να ανοιξετε την lisp από το τερματικό σας σε unix, απλά πατήστε clisp, τη
συνέχεια θα δείτε ένα τερματικό όπως:
[1]>
Η lisp παρέχει ένα βρόγχο διαβάσματος-αποτίμησης-εκτύπωσης (ρεαδ-πριντ-εvαλ
λοοπ ή ΡΕΛΠ). Για να κλείσετε την lisp απλά πατήστε το τερματικό σας (εξιτ).
Ας ορίσουμε τώρα την πρώτη μας συνάρτηση:
(defun hello()
(write-string "Hello, World!"))
Στη συνέχεια για να την καλέσουμε απλά πληκτρολογούμε στο τερματικό: (ηελλο)
και το αποτέλεσμα που πρέπει να δούμε είναι το ακόλουθο: [2]> (hello) Hello, World!
”Hello, World!”
ΛΙΣΤΕΣ
Το όνομα lisp προέρχεται από τις λέξεις Λιστ Προςεσσορ και παρόλο που η γλώσ-
σα έχει ωριμάσει πολύ με την πάροδο των ετών, οι λίστες παραμένουν η κεντρική δομή
δεδομένων της. Η λίστες είναι πολύ σημαντικές γιατί μπορούν να χρησιμοποιηθούν
για την αναπαράσταση οτιδήποτε, από σύνολα, πίνακες γραφήματα μέχρι και προτάσεις
στη φυσική γλώσσα. Μια λίστα ορίζεται με το να περικλείουμε τα στοιχεία της μέσα
σε παρενθέσεις χρησιμοποιώντας την συνάρτηση list, για παράδειγμα:
(list "RED" "GREEN" "BLUE")
(list "AARDVARK")
(list 2 3 5 7 11 13 17)
(list "3 FRENCH HENS" "2 TURTLE DOVES" "1 PARTRIDGE in a PEAR TREE")
΄Ολα τα παραπάνω ορίζουν λίστες. Μία χρήσιμη σύντμηση για τη συνάρτηση
αυτή είναι μία μονή παράθεση. Για παράδειγμα η λίστα (list 1 2 3) θα μπορούσε
να έχει ορισθεί ώς ΄(1 2 3). Προσοχή όμως μία λίστα με ένα όρισμα είναι τελείως
διαφορετική δομή δεδομένων από μία σταθερά. Οι λίστες μπορεί να είναι φωλιασμένες,
για παράδειγμα:
(list (list 1 2) (list 3 4))
121
Μια λίστα χωρίς στοιχεία ονομάζεται κενή λίστα και συμβολίζεται με τη λέξη
κλειδί N IL. Για να ελέγξουμε την ισότητα ανάμεσα σε δύο λίστες μπορούμε να
χρησιμοποιήσουμε τη συνάρτηση EQU ALS η οποία επιστρέφει Τ (true) όταν δύο
λίστες είναι ίσες και N IL (f alse) όταν δεν είναι. Προφανώς δύο λίστες είναι ίσες
όταν τα στοιχεία τους είναι ίσα. ΄Ετσι η παρακάτω σύγκριση επιστρέφει N IL:
(EQUAL (list (list 1 2) (list 3 4)) (list 1 2 3 4))
Ενώ η ακόλουθη T :
(EQUAL (list 1 2 3 4) (list 1 2 3 4))
Η lisp παρέχει συναρτήσεις για την επιστροφή του πρώτου δεύτερου και τρίτου στοι-
χείου κάθε λίστας όπως φαίνεται στο παρακάτω κομμάτι κώδικα:
[9]> (FIRST (list 1 2 3))
1
[9]> (SECOND (list 1 2 3))
2
[9]> (THIRD (list 1 2 3))
3
΄Οταν λέμε ότι μία συνάρτηση ¨επιστρέφει’ ένα στοιχείο όπως μία λίστα ή ένα αντι-
κείμενο δεν είμαστε ακριβείς. Στο εσωτερικό του υπολογιστή δεν υπάρχουν λίστες
και αντικείμενα πάρα μόνο θέσεις μνήμης τις οποίες τις προσπελάσουμε χρησιμοποι-
ώντας δείκτες. ΄Ετσι για να είμαστε ακριβείς το πραγματικό όρισμα ή η έξοδος μίας
συνάρτησης δε είναι ένα αντικείμενο αλλά ένας δείκτης.
Κάθε κόμβος μίας λίστας μπορεί χωρίζεται σε δύο μέρη, το αριστερό και το δεξί.
Το πρώτο μισό (δηλαδή το δεξί) λέγεται CAR ενώ το δεύτερο μισό CDR. Τα ο-
νόματα είναι κατάλοιπα από τους πρώτους υπολογιστές που δεν είχαν τρανζίστορ και
συγκεκριμένα από τον IBM 704.
΄Ετσι για παράδειγμα, το αριστερό στοιχείο του πρώτου κόμβου της λίστας (1 2 3)
είναι ένας δείκτης στο περιεχόμενο αυτού του κόμβου, ενώ το δεξί ένας δείκτης στο
υπόλοιπο της λίστας αυτής.
[9]> (CAR (list 1 2 3))
1
[9]> (CDR (list 1 2 3))
(2 3)
Προφανώς αν η λίστα έχει μόνο ένα στοιχείο τότε η CDR θα επιστρέψει την κενή
λίστα, π.χ.
[9]> (CDR (list "ABC"))
NIL
122
Αντιδιαμετρικά με τα CAR και CDR, η συνάρτηση CON S χρησιμοποιείται για την
εισαγωγή ενός στοιχείου στην κεφαλή μίας λίστας. Για παράδειγμα:
[10]> (CONS 1 (list 2 3))
(1 2 3)
Παρατηρήστε όμως ότι, στην περίπτωση που δεν εισάγουμε ένα μόνο στοιχείο αλλά
μια λίστα το αποτέλεσμα δεν θα είναι μία λίστα αλλά μία μόνο φωλιασμένη λίστα. Για
παράδειγμα:
[10]>(CONS (list 1 ) (list 2 3))
((1) 2 3)(CONS 1 (list 2 3))
Μία συνήθης χρήση της CON S είναι η δημιουργία λιστών από την αρχή. Για πα-
ράδειγμα για τη δημιουργεία της λίστας (’F OO’ ’BAR’) θα μπορούσαμε να χρησιμο-
ποιήσουμε την CON S ώς εξής:
[10]> (CONS "FOO" (CONS "BAR" NIL) )
("FOO" "BAR")
Είναι ενδιαφέρον να παρατηρήσει κανείς ότι υπάρχει μία συμμετρία ανάμεσα στη CON S
και τις CAR και CDR η οποία μπορεί να εκφρασθεί τυπικά ώς: x = (CON S (CAR
x) (CDR x».
Ας δούμε ένα παράδειγμα. ΄Εστω ότι έχουμε μία λίστα (’T HIS’ ’IS’ ’Y OU R’
’N AM E’) και θέλουμε να αλλάξουμε το πρώτο στοιχείο της λίστας αυτής με ’W HAT ’.
Αυτό μπορεί εύκολα να υλοποιηθεί με τον ακόλουθο κώδικα:
[10]> (CONS "WHAT" (CDR (list "THIS" "IS" "YOUR" "NAME")))
("WHAT" "IS" "YOUR" "NAME")
Κατά την εκτύπωση μίας λίστας ως εξόδου, η lisp ξεκινάει από μία αριστερή παρένθεση
η οποία ακολουθείται από όλα τα στοιχεία με κενά μεταξύ τους. Τότε, αν μία λίστα
τελειώνει με N IL η lisp εκτυπώνει μία αριστερή παρένθεση. Αν η λίστα δεν τελειώνει
με N IL τότε η lisp εκτυπώνει ένα κενό και μία τελεία πριν το τελευταίο στοιχείο της
λίστας. Μία τέτοια λίστα η οποία καλείται λίστα με τελεία αντί για κανονική λίστα
μοιάζει λοιπόν ως εξής: (A B C . D). Ο μόνος τρόπος να κατασκευάσουμε μία τέτοια
λίστα με τη μέχρι στιγμής γνώση μας είναι ως εξής:
2]> (CONS (list "A" "B" "C") "D")
(("A" "B" "C") . "D")
Η συνάρτηση AP P EN D χρησιμοποιείται για την παράθεση λιστών. Παίρνει σαν
ορίσματα δύο λίστες και επιστρέφει μία νέα λίστα η οποία έχει όλα τα στοιχεία της
πρώτης ακολουθούμενα από τα στοιχεία της δεύτερης:
> (append ’(friends romans) ’(and countrymen))
(FRIENDS ROMANS AND COUNTRYMEN)
123
> (append ’(l m n o) ’(p q r))
(L M N O P Q R)
Αν ένα από τα δύο ορίσματα είναι η κενή λίστα, τότε το αποτέλεσμα θα είναι ίσο με
το άλλο όρισμα.
> (append ’(april showers) nil)
(APRIL SHOWERS)
> (append nil ’(bring may flowers))
(BRING MAY FLOWERS)
> (append nil nil)
NIL
Μέχρι στιγμής έχουμε δει τρεις διαφορετικούς τρόπους για να δημιουργήσουμε
λίστες. Είναι χρήσιμο στο σημείο αυτό να ξεκαθαρίσουμε τη χρήση του καθενός:
(1) η CON S δημιουργεί ένα νέο κόμβο, και χρησιμοποιείται για να προσθέσουμε
ένα νέο στοιχείο σε μία λίστα
(2) η LIST δημιουργεί μία νέα λίστα παίρνοντας ένα αυθαίρετο αριθμό ορι-
σμάτων. Δημιουργεί δηλαδή μία λίστα από κόμβους η οποία τελειώνει με το
στοιχείο N IL
(3) η AP P EN D παραθέτει λίστες τη μία μετά την άλλη αντιγράφοντας τα στοι-
χεία του πρώτου ορίσματος και στη συνέχεια τα ορίσματα του δεύτερου σε
μία νέα λίστα.
΄Αλλες πολύ χρήσιμες συναρτήσεις για λίστες είναι η Reverse η οποία αντιστρέφει τα
στοιχεία μίας λίστας, η nth και η nthcdr η οποία επιστρέφει το n-οστό στοιχείο της
λίστας και την υπό-λίστα που ξεκινά από το n-οστό στοιχείο αντίστοιχα , η last η
οποία επιστρέφει το τελευταίο στοιχείο της λίστας, η remove η οποία αφαιρεί όλες τις
εμφανίσεις από μία λίστα του ορίσματός της.
> (reverse ’(l i v e))
(E V I L)
>(nthcdr 0 ’(a b c))
(a b c)
>(nthcdr 1 ’(a b c))
(b c)
Λίστες ως σύνολα. ΄Ενα σύνολο είναι μία συλλογή από κάποια αντικείμενα
τέτοια ώστε κάθε αντικείμενο να εμφανίζεται μόνο μία φορά. Τα σύνολα είναι μία
από τις πιο χρήσιμες δομές δεδομένων. Οι βασικοί τελεστές των συνόλων είναι ο
έλεγχος αν ένα στοιχείο ανήκει σε ένα σύνολο (member), η ένωση (union), τομή
(intersection) και η αφαίρεση συνόλων (set − dif f erence). Η lisp παρέχει έτοιμες
συναρτήσεις για όλες αυτές τις συναρτήσεις όπως θα δούμε πιο κάτω.
Η συνάρτηση M EM BER ελέγχει αν το πρώτο της όρισμα ανήκει στο δεύτερο
όρισμα (το οποίο πρέπει να είναι μία λίστα). Αν το αντικείμενο βρεθεί, επιστρέφεται μία
υπο-λίστα η οποία ξεκινά από το στοιχείο αυτό. Αν το στοιχείο δεν βρεθεί η συνάρτη-
ση επιστρέφει N IL. Αν και η συνάρτηση αυτή δεν επιστρέφει T ή N IL παραδοσιακά
χαρακτηρίζεται ως κατηγόρημα γιατί επιστρέφει πάντα μη ΝΙΛ τιμή (την οποία θε-
ωρούμε ως αληθή) αν και μόνο αν το στοιχείο βρεθεί. Για παράδειγμα η ακόλουθη
συνάρτηση, επιστρέφει μη N IL τιμή αν και μόνο αν το πρώτο όρισμα εμφανίζεται στη
λίστα (τρίτο όρισμα) πριν από το δεύτερο.
(defun beforep (x y l)
(member y (member x l)))
>(beforep 1 2 ’(1 2 3))
(2 3)
>(beforep 2 1 ’(1 2 3))
NIL
Η συνάρτηση IN T ERSECT ION παίρνει ως όρισμα δύο σύνολα και επιστρέφει
μία λίστα με τα κοινά στοιχεία και των δύο συνόλων. Η σειρά με την οποία τα στοιχεία
εμφανίζονται στις λίστες δεν είναι ορισμένη (μπορεί να αλλάζει από τη μία έκδοση της
lisp σε άλλη) αλλά αυτό δεν μας ενδιαφέρει στα σύνολα έτσι και αλλιώς.
> (intersection ’(fred john mary)
’(sue mary fred))
(FRED MARY)
Η U N ION επιστρέφει την ένωση των δύο συνόλων. Αν κάποια στοιχεία εμφανίζονται
και στα δύο σύνολα θα εμφανίζονται μόνο μία φορά στο αποτέλεσμα.
> (union ’(finger hand arm)
’(toe finger foot leg))
(ALPHA DELTA)
Μία χρήσιμη συνάρτηση είναι το κατηγόρημα του υποσυνόλου (SU BSET P ) η οποία
επιστρέφει T αν το πρώτο σύνολο είναι υποσύνολο του δεύτερου.
>(subsetp ’(a i) ’(a e i o u))
T
Λίστες σαν πίνακες. Οι πίνακες είναι άλλη μία πολύ χρήσιμη δομή δεδομένων
που μπορεί να κατασκευαστεί χρησιμοποιώντας λίστες. ΄Ενας πίνακας (ή μία λίστα
συσχέτισης) είναι απλώς μία λίστα από λίστες. Κάθε λίστα καλείται στοιχείο, και
η συνάρτηση car σε κάθε στοιχείο επιστρέφει το κλειδί του. Για παράδειγμα ένας
πίνακας με αγγλικές λέξεις και τις ελληνικές τους αντίστοιχες δίνεται παρακάτω. Ο
πίνακας περιέχει πέντε στοιχεία, τα κλειδιά των οποίων είναι οι αγγλικές λέξεις:
(setf words
’((one 1)
(two 2)
(three 3)
(four 4)
(five 5)))
Στο παραπάνω παράδειγμα η συνάρτηση σετφ ορίζει μία καθολική μεταβλητή (με
αυτές θα ασχοληθούμε σε παρακάτω παράγραφο).
Μία πολύ χρήσιμη συνάρτηση όταν δουλεύουμε με πίνακες είναι η ASSOC, η
οποία παίρνει σαν όρισμα το κλειδί ενός στοιχείου και επιστρέφει το στοιχείο αυτό.
>(assoc ’three words)
(three tria)
>(assoc ’four words)
(four tessera)
>(assoc ’six words)
NIL
Η ASSOC εξετάζει ένα ένα τα στοιχεία του πίνακα ως προς το κλειδί για να βρεί
αυτό που ταιριάζει με το κλειδί αναζήτησης. Αν το βρει επιστρέφει αυτό το στοιχείο
αλλιώς επιστρέφει N IL.
Η συνάρτηση RASSOC λειτουργεί με παρόμοιο τρόπο με τι διαφορά ότι εξετάζει
το cdr κάθε στοιχείου αντί για το car. Για να χρησιμοποιήσουμε τη συνάρτηση αυτή
με σύμβολα ως κλειδιά του πίνακα, ο πίνακας πρέπει να περιέχει ζευγάρια με τελεία,
όπως φαίνεται στο επόμενο παράδειγμα:
126
(setf sounds
’((cow . moo)
(pig . oink)
(cat . meow)
(dog . woof)
(bird . tweet)))
Και οι δύο αυτές συναρτήσεις επιστρέφουν το αποτέλεσμά τους στο πρώτο στοιχείο
του πίνακα που ικανοποιεί τα κριτήρια της αναζήτησης, η υπόλοιπη λίστα δεν εξετάζεται
καθόλου.
>(setf dotted-words
127
’((one . ena)
(two . duo)
(three . tria)
(four . tessera)
(five . pente)))
Αποτίμηση
ΜΕΤΑΒΛΗΤΕΣ
Ας δούμε σε αυτό το σημείο ένα παράδειγμα λάθους χρήσης της εμβέλειας των μετα-
βλητών:
(defun parent (n)
(child (+ n 2)))
(defun child (p)
129
(list n p))
Το παραπάνω πρόγραμμα θα δημιουργήσει ένα λάθος καθώς η μεταβλητή n δεν είναι
δεσμευμένη στο σώμα της συνάρτησης child ούτε είναι καθολική.
Χρησιμοποιώντας τη συνάρτηση let οι μεταβλητές δημιουργούνται ταυτόχρονα.
Αυτό έχει σαν αποτέλεσμα η παρακάτω συνάρτηση να μην είναι σωστά ορισμένη.
Ο παραπάνω ορισμός είναι λάθος γιατί κατά τη κλήση της μεταβλητής dif f αυτή δεν
έχει ορισθεί ακόμα. Αυτό το πρόβλημα μπορεί εύκολα να ξεπεραστεί χρησιμοποιώντας
τη συνάρτηση LET ∗ η οποία αναγκάζει τις μεταβλητές να ορίζονται μία μία με τη σειρά
που εμφανίζονται στο πρόγραμμα. Ετσι, το παρακάτω πρόγραμμα δεν δίνει κανένα
λάθος:
ΣΥΝΘΗΚΕΣ
130
(if (oddp 2) ’odd ’even) then even
[1]> (myAbs 3)
3
Ας δούμε μερικά ακόμα παραδείγματα. Στα ακόλουθα κομμάτια κώδικα η συνάρτηση
make − even κάνει έναν ζυγό αριθμό μονό, my − not η οποία επιστρέφει T αν το
όρισμα είναι N IL και η ορδερεδ επιστρέφει T αν τα ορίσματα είναι σε διάταξη.
(defun make-even(x) (if (= (mod x 2) 0) (+ x 1) x ))
Μία άλλη πολύ χρήσιμη συνθήκη είναι η μετά-συνάρτηση CON D. Αυτή παίρνει ένα
σύνολο από όρους της μορφής τέστ-αποτέλεσμα. Η συνήθης μορφή του είναι η εξής:
(COND (test-1 consequent-1)
(test-2 consequent-2)
(test-3 consequent-3)
131
....
(test-n consequent-n))
Σε μία τέτοια δήλωση, εξετάζονται οι συνθήκες στην σειρά. Αν κάποια συνθήκη α-
ποτιμηθεί σε T τότε σταματά και επιστρέφεται η έκφραση του αποτελέσματος της
συνθήκης, δηλαδή οι υπόλοιπες συνθήκες δεν αποτιμώνται. Για παράδειγμα ας ο-
ρίσουμε μία συνάρτηση που παίρνει δύο ορίσματα και επιστρέφει το μεγαλύτερο από
αυτά.
[1]>(DEFUN compares (x y)
(COND ((< x y) y)
((> x y) x)
((= x y) ’equal)))
COMPARES
[1]>(compares 1 2)
2
[1]> (compares 2 2)
EQUAL
Μία συνηθισμένη τεχνική όταν χρησιμοποιούμε την CON D είναι να περιλαμβάνουμε
έναν όρο, του οποίου το τεστ είναι πάντα αληθές: (T consequent). Αφού το T είναι
πάντα αληθές αν φτάσει σε αυτό το σημείο το πρόγραμμα θα αποτιμήσει πάντα το
αποτέλεσμα του τεστ. Για παράδειγμα:
(defun where-is (x)
(cond ((equal x ’paris) ’france)
((equal x ’london) ’england)
((equal x ’beijing) ’china)
(t ’unknown)))
Πολλές φορές είναι αναγκαίο να κατασκευάσουμε πιο σύνθετες συνθήκες, αυτό είναι
δυνατό με τη χρήση των AN D και OR. Για παράδειγμα, η ακόλουθη συνάρτηση
επιστρέφει T αν το όρισμα είναι μονός αριθμός και μικρότερος του 100:
(defun small-positive-oddp (x)
(and (< x 100)
(> x 0)
(oddp x)))
Η ακόλουθη συνάρτηση, συγκρίνει τα δύο ορίσματα και επιστρέφει ένα ανάλογο μήνυ-
μα:
[1]>(defun how-alike (a b)
(cond ((equal a b) "the-same")
((and (oddp a) (oddp b)) "both-odd")
((and (not (oddp a)) (not (oddp b)))
132
"both-even")
((and (< a 0) (< b 0)) "both-negative")
(t "not-alike")))
[1]> (how-alike 1 2)
"not-alike"
Ας δούμε σε αυτό το σημείο ένα απλό πρόβλημα προγραμματισμού. ΄Εστω ότι θέλουμε
να γράψουμε ένα πρόγραμμα το οποίο θα προσθέτει ένα τίτλο σε κάθε όνομα. Για
παράδειγμα θα πρέπει να μετατρέπει τα ΄Θοην Δοε΄ σε ΄Μρ. Θοην Δοε΄ και το ΄Θανε
Δοε΄ σε ΄Μς. Θανε Δοε΄. Αν ο τίτλος υπάρχει ήδη τότε θα πρέπει να διατηρηθεί. Αν
όμως δεν υπάρχει τότε θα πρέπει να προσδιορίσουμε το φύλο ώστε να το προσθέσουμε.
(setf male-first-names
’(john kim richard fred george))
(setf female-first-names
’(jane mary wanda barbara kim))
(defun malep (name)
(and (member name male-first-names)
(not (member name female-first-names))))
133
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΧΡΗΣΗ ΕΦΑΡΜΟΓΩΝ
(1 4 9 16 25)
Αυτός ο τελεστής είναι ιδιαίτερα χρήσιμος όταν δουλεύουμε με πίνακες. Για παράδειγ-
μα έστω:
(setf words
’((one un)
(two deux)
(three trois)
(four quatre)
(five cinq)))
Τότε αν θέλουμε να πάρουμε το πρώτο σύμβολο από κάθε στοιχείο του πίνακα (θυμη-
θείτε ότι ένας πίνακας είναι απλά μία λίστα από λίστες) μπορούμε απλώς να γράψουμε:
> (mapcar #’first words)
(ONE TWO THREE FOUR FIVE)
134
΄Η αν θέλαμε να αντιστρέψουμε τα κλειδιά με τα στοιχεία θα μπορούσαμε απλά να
πούμε:
> (mapcar #’reverse words)
((UN ONE)
(DEUX TWO)
(TROIS THREE)
(QUATRE FOUR)
(CINQ FIVE))
Μία συνάρτηση η οποία μεταφράζει κάθε λέξη του πίνακα είναι πολύ εύκολο με
τη χρήση του mapcar να ορισθεί ως:
>(defun translate (x)
(second (assoc x words)))
Η REM OV E − IF είναι ένας ακόμα τελεστής ο οποίος παίρνει ένα κατηγόρημα σαν
είσοδο. Ο τελεστής αυτός αφαιρεί όλα τα στοιχεία από τη λίστα αν ικανοποιούν το
κατηγόρημα και επιστρέφει μία λίστα με τα υπόλοιπα:
> (remove-if #’numberp ’(2 for 1 sale))
(FOR SALE)
> (remove-if #’oddp ’(1 2 3 4 5 6 7))
(2 4 6)
Η REM OV E − IF − N OT χρησιμοποιείται συχνότερα από την REM OV E −
IF . Η λειτουργία της είναι παρόμοια, με τη διαφορά ότι τα στοιχεία της λίστας που
αφαιρούνται είναι αυτά για τα οποία η συνθήκη δεν ισχύει (επιστρέφει N IL δηλαδή).
Για παράδειγμα:
> (remove-if-not #’oddp ’(2 0 -4 6 -8 10))
NIL
Η συνάρτηση REDU CE είναι παρόμοια με τις προηγούμενες με τη διαφορά ότι επι-
στρέφει ένα μοναδικό αποτέλεσμα αντί για λίστα και παίρνει σαν είσοδο μόνο συναρ-
τήσεις με δύο ορίσματα. Για παράδειγμα για να προσθέσουμε όλους τους αριθμούς
που βρίσκονται σε μία λιστα μπορούμε απλά:
> (reduce #’+ (1 2 3))
6
ΑΝΑΔΡΟΜΗ
Η Αναδρομή είναι μία από τις πιο θεμελιώδεις και όμορφες ιδέες στην επιστήμη
των υπολογιστών. Μία συνάρτηση λέγεται αναδρομική αν καλεί τον εαυτό της. Ας
ξεκινήσουμε με ένα παράδειγμα, με μία συνάρτηση που ελέγχει αν τα στοιχεία μίας
λίστας και επιστρέφει T αν κάποιο από αυτά είναι περιττός και N IL αλλιώς.
ΕΙΣΟΔΟΣ-ΕΞΟΔΟΣ
Η είσοδος και η έξοδος ενός προγράμματος είναι ο τρόπος με τον οποίο αυτό
επικοινωνεί με τον κόσμο. Το σύστημα repl της lisp παρέχει ένα απλό τρόπο είσοδο
εξόδου χρησιμοποιώντας το πληκτρολόγιο. Παρόλα αυτά πολλές φορές θέλουμε να
κάνουμε ένα βήμα παραπάνω, για παράδειγμα να διαβάσουμε δεδομένα από ένα αρχείο
μία βάση δεδομένων ή να γράψουμε σε αυτά.
Η συνάρτηση F ORM AT χρησιμοποιείται για τη μορφοποίηση της εξόδου. Ει-
῀ θα δημιουργηθεί ένα κενό, ενώ
σάγοντας σε μία συμβολοακολουθία το χαρακτήρα %
ο χαρακτήρας ∼ S χρησιμοποιείται για εισαγωγή μιας αναπαράστασης ως χαρακτήρα
137
ενός αντικειμένου της lisp. Η συνάρτηση READ χρησιμοποιείται για να διαβάσουμε
ένα αντικείμενο (νούμερο, λίστα ή οτιδήποτε) από το πληκτρολόγιο. Για παράδειγμα:
(defun my-square ()
(format t "Please type in a number: ")
(let ((x (read)))
(format t "The number ~S squared is ~S.~%"
x (* x x))))
> (my-square)
Please type in a number: 7
The number 7 squared is 49.
NIL
> (save-tree-data
"The West Ridge"
’((45 redwood) (22 oak) (43 maple))
110)
ΕΠΑΝΑΛΗΨΗ
Μέχρι στιγμής η μόνη επαναληπτική δομή που έχουμε δει είναι η αναδρομή. Πα-
ρόλα αυτά υπάρχουν και απλούστερες επαναληπτικές δομές τις οποίες καλούμε βρόγ-
χους. Η επανάληψη στη lisp υποστηρίζεται από τα κατασκευάσματα DO και DO∗
καθώς και απλουστευμένες τους εκδοχές που καλούνται DOT IM ES και DOLIST .
Οι DOT IM ES και DOLIST , είναι μακρό-συναρτήσεις με την έννοια ότι δεν
αποτιμούν όλα τους τα ορίσματα. Η σύνταξή τους είναι:
Η εντολή DO είναι η πίο ισχυρή μορφή βρόγχου της lisp. Μπορεί να δεσμεύσει ένα
σύνολο μεταβλητών (όπως η let) και να αυξήσει οποιοδήποτε αριθμό δεικτών , ενώ
επιτρέπει να ορίσουμε εμείς τον τρόπο με τον οποίο θα βγούμε από το βρόγχο. Η
σύνταξή της είναι η εξής:
(DO ((var1 init1 [update1])
(var2 init2 [update2])
...)
(test action-1 ... action-n)
body)
140
Αρχικά, κάθε μεταβλητή DO τίθεται σε μία αρχική τιμή. Στη συνέχεια αποτιμάται το
test. Αν το αποτέλεσμα είναι T τότε αποτιμώνται οι όροι action − 1 με action − n και
επιστρέφεται η τιμή του τελευταίου. Στο εσωτερικό του σώματος του βρόγχου μπορεί
να υπάρχουν όροι return οι οποίοι το αναγκάζουν να επιστρέψει αμέσως και να μη
συνεχίσει την επανάληψη. Η έκφραση update είναι προαιρετική και στην περίπτωση
όπου δεν υπάρχει δεν θα αλλάξει η τιμή της μεταβλητής. ΄Οταν όλες οι μεταβλητές
έχουν ενημερωθεί τότε τα test εξετάζονται ξανά. Για παράδειγμα:
(defun launch (n)
(do ((cnt n (- cnt 1)))
((zerop cnt) (format t "Blast off!"))
(format t "~S..." cnt)))
Τέλος η DO∗ έχει την ίδια σύνταξη με την DO με τη διαφορά ότι οι ενημερώσεις των
μεταβλητών πραγματοποιούνται σειριακά και όχι ταυτόχρονα (κατά αντιστοιχία με την
let∗ και την let). Για παράδειγμα:
(defun ffo-with-do* (list-of-numbers)
(do* ((x list-of-numbers (rest x))
(e (first x) (first x)))
((null x) nil)
(if (oddp e) (return e))))
141
Bibliography
142
[22] R. Diaconescu, K. Futatsugi, Kazuhiro Ogata: CafeOBJ: Logical Foundations and Method-
ologies. Computers and Artificial Intelligence 22(3-4): 257-283 (2003)
[23] K. Ogata, K. Futatsugi: Some Tips on Writing Proof Scores in the OTS/CafeOBJ Method.
Essays Dedicated to Joseph A. Goguen 2006: 596-615
[24] K. Ogata, K. Futatsugi: Proof Scores in the OTS/CafeOBJ Method. FMOODS 2003: 170-184
[25] K. Futatsugi, J. A. Goguen, K. Ogata: Verifying Design with Proof Scores. VSTTE 2005:
277-290
[26] K. Ogata, K. Futatsugi: Some Tips on Writing Proof Scores in the OTS/CafeOBJ Method.
Essays Dedicated to Joseph A. Goguen 2006: 596-615
[27] K. Ogata, K. Futatsugi: Proof Score Approach to Analysis of Electronic Commerce Protocols.
International Journal of Software Engineering and Knowledge Engineering 20(2): 253-287
(2010)
[28] K. Futatsugi, D. Gâinâ, K. Ogata: Principles of proof scores in CafeOBJ. Theor. Comput.
Sci. 464: 90-112 (2012)
[29] K. Ogata, K. Futatsugi: Compositionally Writing Proof Scores of Invariants in the
OTS/CafeOBJ Method. J. UCS 19(6): 771-804 (2013)
[14] J. Goguen, G. Malcolm: Teaching and Learning Formal Methods (eds M. Hinchey and C.
Nevill Dean). Academic Press 1996: 161-17
143