Άσκηση 1 Σειρά Προβλημάτων 3 Λύσεις Να δώσετε ασυμφραστικές γραμματικές που να παράγουν τις πιο κάτω γλώσσες: (α) { w {(, )} * οι παρενθέσεις στην w είναι ισοζυγισμένες } (β) { a k b m c 2m a k k > 0, m 0 } (γ) { uavb u, v {a,b} *, u = v } Λύση (α) Μια (μονότροπη) γραμματική για τη γλώσσα έχει ως εξής: S (S)S {S}S ε (β) Η πιο κάτω γραμματική χρησιμοποιεί δύο μεταβλητές, η μια έχει σαν στόχο την εισαγωγή ισάριθμων a στην αρχή και στο τέλος των λέξεων και η δεύτερη δημιουργεί τις ομάδες των b και c: S asa ata Τ btcc ε (γ) Η πιο κάτω γραμματική ξεκινά τοποθετώντας το τελικό b στις λέξεις και στη συνέχεια προσθέτει ένα σύμβολο στην αρχή και ένα σύμβολο στο τέλος της λέξης (γίνονται όλοι οι δυνατοί συνδυασμοί) ενώ ενδιάμεσα τοποθετείται ένα a: S Tb Τ ata atb bta btb a Άσκηση 2 Να κτίσετε αυτόματα στοίβας για τις πιο κάτω γλώσσες: (α) { uavb u, v {a,b} *, u = v } Λύση (α) Ακολουθεί το ζητούμενο αυτόματο: 0 ε, ε $ 1 a, ε Χ b, ε Χ a, ε ε 3 b, $ ε 2 a, X ε b, X ε Ξεκινώντας, το αυτόματο τοποθετεί το $ στη στοίβα έτσι ώστε να αναγνωρίζει ότι η στοίβα είναι κενή. Στη συνέχεια, διαβάζει 0 ή περισσότερα a και b και για κάθε ένα από αυτά Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2014 Σελίδα 1
τοποθετεί στη στοίβα το σύμβολο Χ. Συνεχίζει διαβάζοντας το σύμβολο a και προχωρεί στην κατάσταση 2. Από την κατάσταση αυτή διαβάζει ένα προς ένα τα σύμβολα που ακολουθούν αφαιρώντας κάθε φορά ένα σύμβολο από τη στοίβα. Αν η στοίβα αδειάσει και το αυτόματο διαβάσει το σύμβολο b, τότε το αυτόματο προχωρεί στην κατάσταση αποδοχής. (β) { x {0,1}* σε κάθε πρόθεμα της λέξης x τα 0 είναι τουλάχιστον όσα και τα 1 } Ακολουθεί το ζητούμενο αυτόματο: 1 0, ε Χ 1, Χ ε Στο πιο πάνω αυτόματο γράφουμε στη στοίβα ένα Χ για κάθε 0 που διαβάζουμε και αφαιρούμε ένα Χ για κάθε 1 που διαβάζουμε. Ως αποτέλεσμα αυτού, ανά πάσα στιγμή, στη στοίβα υπάρχουν τόσα Χ όσα περισσότερα είναι και τα 0 από τα 1 στο πρόθεμα της λέξης που έχουμε διαβάσει μέχρι τη συγκεκριμένη στιγμή. Εάν από την (μοναδική) κατάσταση 1 του αυτομάτου, κατορθώσουμε να διαβάσουμε ολόκληρη τη λέξη μας, τότε η λέξη έχει την κατάλληλη μορφή και μπορούμε να την αποδεχτούμε. Αντιθέτως, αν το αυτόματο διαβάσει 1 και η στοίβα είναι κενή τότε θα βρεθεί σε αδιέξοδο και θα απορρίψει τη λέξη. (γ) { a i b j c k i,j,k 0 και i = j ή i = k ή j = k } Ακολουθεί το ζητούμενο αυτόματο: a, ε Χ b, Χ ε c, ε ε ε, ε ε ε, $ ε 2 3 4 a, ε ε b, ε Χ c, Χ ε 1 ε, ε $ ε, ε ε ε, ε ε 5 6 7 ε, $ ε 8 a, ε Χ 9 ε, ε ε b, ε ε c, Χ ε ε, ε ε ε, $ ε 10 11 12 Το αυτόματο αυτό ξεκινά με μια αντιαιτιοκρατική επιλογή ανάμεσα σε τρεις περιπτώσεις. Οι τρεις περιπτώσεις αντιστοιχούν (1) στην περίπτωση όπου τα a είναι ίσα σε πλήθος με τα b (μονοπάτι 2 4), (2) στην περίπτωση που τα b είναι ίσα σε πλήθος με τα c (μονοπάτι 5 8) και (3) στην περίπτωση όπου τα a είναι ίσα σε πλήθος με τα c (μονοπάτι 9 12). Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2014 Σελίδα 2
Άσκηση 3 Να αποφασίσετε κατά πόσο η κλάση των ασυμφραστικών γλωσσών είναι κλειστή ως προς τις πράξεις (i) της ένωσης και (ii) της τομής, αιτιολογώντας τις απαντήσεις σας. Λύση (i) Θα δείξουμε ότι αν οι Λ 1 και Λ 2 είναι ασυμφραστικές γλώσσες τότε η γλώσσα Λ 1 Λ 2 είναι επίσης ασυμφραστική. Για να το πετύχουμε θα κατασκευάσουμε γραμματική που αποδέχεται τη Λ 1 Λ 2 συνδυάζοντας τις γραμματικές των αρχικών γλωσσών. (Εναλλακτικά θα μπορούσαμε να δουλέψουμε με αυτόματα στοίβας.) Έστω G 1 = (V 1, Σ 1, R 1, S 1 ) και G 2 = (V 2, Σ 2, R 2, S 2 ) οι ασυμφραστικές γραμματικές που παράγουν τις Λ 1 και Λ 2 αντίστοιχα. Η ζητούμενη γραμματική είναι η εξής: G 1 2 = (V 1 V 2 {S}, Σ 1 Σ 2, R 1 R 2 {S S 1, S S 2 }, S). H γραμματική αυτή συνδυάζει τις δύο αρχικές γραμματικές και τις επεκτείνει με μια καινούρια αρχική μεταβλητή S η οποία επιτρέπει την παραγωγή των δύο αρχικών μεταβλητών των γραμματικών G 1 και G 2 μέσω των νέων κανόνων S S 1, S S 2. Μπορούμε να αποδείξουμε ότι η γραμματική G 1 2 παράγει τη γλώσσα Λ 1 Λ 2. Συγκεκριμένα, θα δείξουμε ότι w L(G 1 2 ) αν και μόνο αν w Λ 1 Λ 2 Έχουμε τα εξής: w L(G 1 2 ) S w S S 1 και S 1 w ή S S 2 και S 2 w S 1 w ή S 2 w w Λ 1 ή w Λ 2 w Λ 1 Λ 2 Το ζητούμενο έπεται. (ii) Αντίθετα με την ένωση, η κλάση των ασυμφραστικών γλωσσών δεν είναι κλειστή ως προς την τομή. Για να το δείξουμε αυτό θα χρησιμοποιήσουμε αντιπαράδειγμα. Συγκεκριμένα, ας θεωρήσουμε τις γλώσσες Α = { a n b n c m n,m 0 } και Β = { a m b n c n n,m 0 } Τότε, έχουμε Α Β = Α = { a n b n c n n 0 }. H γλώσσα αυτή όμως δεν είναι ασυμφραστική (δες διαφάνεια 6 14). Ως εκ τούτου, η κλάση των ασυμφραστικών γλωσσών δεν είναι κλειστή ως προς την τομή. Άσκηση 4 Να δείξετε ότι οι πιο κάτω γλώσσες δεν είναι ασυμφραστικές αιτιολογώντας με ακρίβεια τις απαντήσεις σας. (α) Λ 1 = {a m b 2m c m m 0} Υποθέτουμε για να φτάσουμε σε αντίφαση ότι η Λ 1 είναι ασυμφραστική. Τότε, σύμφωνα με το Λήμμα της Άντλησης, υπάρχει p, το μήκος άντλησης της γλώσσας, τέτοιο ώστε κάθε Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2014 Σελίδα 3
λέξη της γλώσσας με μήκος μεγαλύτερο από p να ικανοποιεί την ιδιότητα που περιγράφεται στο λήμμα. Ας επιλέξουμε τη λέξη w =. Τότε, σύμφωνα με το λήμμα, w = uvxyz έτσι ώστε η υπολέξη vxy περιέχει το πολύ p σύμβολα ( vxy p), τουλάχιστον μία από τις v και y να είναι μη κενή ( vy > 0) και οποιαδήποτε ταυτόχρονη επανάληψη των υπολέξεων v και y να διατηρεί την προκύπτουσα λέξη εντός της γλώσσας (uv i xy i z Λ 1, i 0). Αφού vxy p, τότε η λέξη αυτή δεν μπορεί να εκτείνεται σε περισσότερα από δύο τμήματα της λέξης. Διακρίνουμε τις πιο κάτω περιπτώσεις. Αν η vxy εκτείνεται μόνο στο τμήμα, τότε τα v και y θα αποτελούνται μόνο από a. Επομένως, αν αφαιρέσουμε τα τμήματα v και y, η λέξη που θα προκύψει δεν θα ανήκει στη γλώσσα μας: w = uv 0 xy 0 z = όπου λ = v, μ = y και προφανώς w Λ 1. Το ίδιο επιχείρημα μπορεί να εφαρμοστεί δείχνοντας ότι αν η vxy περιέχει μόνο b ή μόνο c, τότε η λέξη δεν θα επιδέχεται άντλησης. Αν η vxy εκτείνεται στα δύο συνεχόμενα τμήματα και, τότε τα v και y θα αποτελούνται τόσο από a όσο και από b. Επομένως, αν αφαιρέσουμε τα τμήματα v και y, η λέξη που θα προκύψει, w = uv 0 xy 0 z, δεν θα ανήκει στη γλώσσα μας αφού τα δύο πρώτα τμήματα θα περιέχουν λιγότερα σύμβολα ενώ το τρίτο τμήμα θα εξακολουθεί να περιέχει p c. Το ίδιο επιχείρημα μπορεί να εφαρμοστεί δείχνοντας ότι αν η vxy εκτείνεται στα συνεχόμενα τμήματα και τότε, και πάλι, η λέξη δεν θα επιδέχεται άντλησης. Αυτό μας οδηγεί σε αντίφαση και επομένως η υπόθεσή μας ότι η γλώσσα Λ 1 είναι ασυμφραστική ήταν εσφαλμένη. Συμπέρασμα: Η Λ 1 είναι μη ασυμφραστική. (β) Λ 2 = { ww R a w w {a,b} * } Υποθέτουμε για να φτάσουμε σε αντίφαση ότι η Λ 2 είναι ασυμφραστική. Τότε, σύμφωνα με το Λήμμα της Άντλησης, υπάρχει p, το μήκος άντλησης της γλώσσας, τέτοιο ώστε κάθε λέξη της γλώσσας με μήκος μεγαλύτερο από p να ικανοποιεί την ιδιότητα που περιγράφεται στο λήμμα. Ας επιλέξουμε τη λέξη w = b p a p a p b p a 2p και ας ονομάσουμε τα τμήματα της λέξης ως Α, Β,Γ,Δ,Ε, όπου w = ΑΒΓΔΕ, και Α = b p, Β = a p, Γ = a p, Δ = b p και Ε = a 2p. Τότε, σύμφωνα με το λήμμα, w = uvxyz έτσι ώστε η υπολέξη vxy περιέχει το πολύ p σύμβολα ( vxy p), τουλάχιστον μία από τις v και y να είναι μη κενή ( vy > 0) και οποιαδήποτε ταυτόχρονη επανάληψη των υπολέξεων v και y να διατηρεί την προκύπτουσα λέξη εντός της γλώσσας (uv i xy i z Λ 2, i 0). Διακρίνουμε τις πιο κάτω περιπτώσεις. Αν η vxy εκτείνεται μόνο στο τμήμα Α, τότε τα v και y θα αποτελούνται μόνο από b. Επομένως, αν αντλήσουμε τα τμήματα v και y, η λέξη που θα προκύψει δεν θα ανήκει στη γλώσσα μας: uv 2 xy 2 z = b p+μ+λ a p a p b p a 2p Λ 2, για μ = v, λ = y. Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2014 Σελίδα 4
Αν η vxy εκτείνεται μόνο στο τμήμα Β, τότε τα v και y θα αποτελούνται μόνο από a. Επομένως, αν αφαιρέσουμε τα τμήματα v και y, η λέξη που θα προκύψει δεν θα ανήκει στη γλώσσα μας: uv 0 x 0 z = b p a p μ λ a p b p a 2p Λ 2, για μ = v, λ = y. Παρατηρείστε ότι ακόμα και αν το τμήμα b p a p μ λ a p b p έχει τη μορφή ww R, το το πλήθος των τελικών a δεν θα είναι το ζητούμενο. Όμοια επιχειρήματα μπορούν να εφαρμοστούν για να δείξουμε ότι, αν η vxy εκτείνεται σε ένα από τα τμήματα Γ, Δ και Ε, τότε και πάλι η λέξη δεν επιδέχεται άντλησης. Αν η vxy εκτείνεται στα δύο συνεχόμενα τμήματα Α και Β, τότε τα v και y δυνατόν να αποτελούνται από a και από b. Αν αφαιρέσουμε τα τμήματα v και y, η λέξη που θα προκύψει δεν θα ανήκει στη γλώσσα μας αφού το πλήθος των b στο τμήμα Α θα είναι μικρότερο από το πλήθος στο τμήμα Δ. Αν η vxy εκτείνεται στα δύο συνεχόμενα τμήματα Β και Γ, τότε τα v και y δυνατόν να αποτελούνται από a. Επομένως, αν αφαιρέσουμε τα τμήματα v και y, η λέξη που θα προκύψει δεν θα ανήκει στη γλώσσα μας αφού το πλήθος των a στο τμήμα Ε θα είναι μεγαλύτερο από το διπλάσιο του μήκους των τμημάτων Β και Γ. Όμοια επιχειρήματα μπορούν να εφαρμοστούν για να δείξουμε ότι αν η vxy εκτείνεται σε κάποια άλλα δύο συνεχόμενα τμήματα (Γ και Δ, Δ και Ε), τότε, και πάλι, η λέξη δεν θα επιδέχεται άντλησης. Αυτό μας οδηγεί σε αντίφαση και επομένως η υπόθεσή μας ότι η γλώσσα Λ 2 είναι ασυμφραστική ήταν εσφαλμένη. Συμπέρασμα: Η Λ 2 είναι μη ασυμφραστική. (γ) Λ 3 = { babaabaaab ba n 1 b n n 0 } Υποθέτουμε για να φτάσουμε σε αντίφαση ότι η Λ 3 είναι ασυμφραστική. Τότε, σύμφωνα με το Λήμμα της Άντλησης, υπάρχει p, το μήκος άντλησης της γλώσσας, τέτοιο ώστε κάθε λέξη της γλώσσας με μήκος μεγαλύτερο από p να ικανοποιεί την ιδιότητα που περιγράφεται στο λήμμα. Ας επιλέξουμε τη λέξη w = babaabaaab ba p 1 b p. Τότε, σύμφωνα με το λήμμα, w = uvxyz έτσι ώστε η υπολέξη vxy περιέχει το πολύ p σύμβολα ( vxy p), τουλάχιστον μία από τις v και y να είναι μη κενή ( vy > 0) και οποιαδήποτε ταυτόχρονη επανάληψη των υπολέξεων v και y να διατηρεί την προκύπτουσα λέξη εντός της γλώσσας (uv i xy i z Λ 3, i 0). Διακρίνουμε τις πιο κάτω περιπτώσεις. Αν η vxy εκτείνεται οπουδήποτε μέσα στο τμήμα baba 2 ba 3 ba 4 b ba p 1, τότε αφαίρεση των τμημάτων v και y θα έχει ως αποτέλεσμα η λέξη που θα προκύψει να μην ανήκει στη γλώσσα Λ 3 : η δομή της λέξης θα αλλάξει με τέτοιο τρόπο ώστε είτε να μην ικανοποιείται η ροή 1 b, 1 a, 1 b, 2 a, 1 b, 3 a,, είτε, το πλήθος των a στο τελευταίο τμήμα από a δεν θα είναι κατά 1 μικρότερο από το πλήθος των b. Αν η vxy εκτείνεται οπουδήποτε μέσα στο τμήμα a p 1 b p, τότε αφαίρεση των τμημάτων v και y θα έχει ως αποτέλεσμα η λέξη που θα προκύψει να μην ανήκει στη γλώσσα Λ 3 : όπως και στην προηγούμενη περίπτωση, αν τα v και y θα περιέχουν κάποια a τότε στη δομή της προκύπτουσας λέξη θα παραβιαστεί η ροή 1 b, 1 a, 1 b, 2 a, 1 b, 3 a,, ενώ, Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2014 Σελίδα 5
αν τα v και y περιέχουν κάποια b τότε το πλήθος των b θα είναι μικρότερο από το αναμενόμενο. Αυτό μας οδηγεί σε αντίφαση και επομένως η υπόθεσή μας ότι η γλώσσα Λ 3 είναι ασυμφραστική ήταν εσφαλμένη. Συμπέρασμα: Η Λ 3 είναι μη ασυμφραστική. Άσκηση 5 Θεωρείστε τη γραμματική G = (V, S, Ρ, ΕΝΤΟΛΗ), όπου V = {ΕΝΤΟΛΗ, ΑΝΑΘΕΣΗ, ΕΝΤΟΛΗ ΙF, ENTOΛH IF ELSE, ΣΥΝΘΗΚΗ}, S = {if, then, else, true, false, a:=0, a:=1} και R οι πιο κάτω κανόνες. ΕΝΤΟΛΗ ΑΝΑΘΕΣΗ ΕΝΤΟΛΗ ΙF ENTOΛH IF ELSE ΕΝΤΟΛΗ ΙF ENTOLH IF ELSE ΣΥΝΘΗΚΗ true false ΑΝΑΘΕΣΗ a:=0 a:=1 if ΣΥΝΘΗΚΗ then ΕΝΤΟΛΗ if ΣΥΝΘΗΚΗ then ΕΝΤΟΛΗ else ΕΝΤΟΛΗ (α) Να δείξετε ότι η γραμματική G είναι πολύτροπη. (β) Να εντοπίσετε πρόγραμμα Ρ που να παράγεται από τη γραμματική G μέσω δύο διαφορετικών συντακτικών δέντρων, Τ 1 και Τ 2 τέτοια ώστε, αν το Ρ ερμηνευθεί με βάση το Τ 1 τότε η μεταβλητή a θα πάρει την τιμή 0, και αν το Ρ ερμηνευθεί σύμφωνα με το δέντρο Τ 2 τότε η μεταβλητή a θα πάρει την τιμή 1. (γ) Να προτείνετε μια καινούρια γραμματική που να παράγει την ίδια γλώσσα με τη G αλλά να είναι μονότροπη. Εξηγήστε σύντομα την απάντησή σας. Λύση (α) Θεωρείστε τη λέξη if true then if false then a:=0 else a:=1. Η λέξη αυτή παράγεται πολύτροπα από τη δοθείσα γραμματική. Αυτό επιβεβαιώνεται από την ύπαρξη των δύο πιο κάτω συντακτικών δέντρων για δύο διαφορετικές παραγωγές τις λέξης. Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2014 Σελίδα 6
ΕΝΤΟΛΗ ΕΝΤΟΛΗ ΕΝΤΟΛΗ-IF ΕΝΤΟΛΗ-IF-ELSE if ΣΥΝΘΗΚΗ then ΕΝΤΟΛΗ if ΣΥΝΘ then E else E true ΕΝΤΟΛΗ-IF-ELSE true ΕΝΤΟΛΗ-IF ΑΝΑΘΕΣΗ if ΣΥΝΘ then E else E if ΣΥΝΘΗΚΗ then a:=1 ΕΝΤΟΛΗ false ΑΝΑΘΕΣΗ ΑΝΑΘΕΣΗ false ANAΘΕΣΗ a:=0 a:=1 a:=0 (β) Παρατηρώντας το πρόγραμμα από το μέρος (α) και υποθέτοντας ότι η αρχική τιμή του a είναι 0, βλέπουμε ότι, αν ερμηνεύσουμε το πρόγραμμα σύμφωνα με το πρώτο δένδρο, έχουμε: if true then {if false then a:=0 else a:=1} και η μεταβλητή a θα πάρει την τιμή 1. Αντίθετα, αν ερμηνεύσουμε το πρόγραμμα σύμφωνα με το δεύτερο δένδρο, έχουμε if true then {if false then a:=0} else a:=1 και η μεταβλητή a θα διατηρήσει την αρχική της τιμή, δηλαδή, a=0. (γ) Για να αφαιρέσουμε την πολυτροπία από τη γραμματική, μεταβάλλουμε τους κανόνες που αφορούν το if ως εξής: ΕΝΤΟΛΗ ΑΝΑΘΕΣΗ ΕΝΤΟΛΗ ΙF ENTOΛH IF ELSE ΕΝΤΟΛΗ ΙF if ΣΥΝΘΗΚΗ then ΕΝΤΟΛΗ ENTOLH IF ELSE if ΣΥΝΘΗΚΗ then ΕΝΤΟΛΗ else ΕΝΤΟΛΗ ΕΝΤΟΛΗ ΑΝΑΘΕΣΗ if ΣΥΝΘΗΚΗ then ΕΝΤΟΛΗ else ΕΝΤΟΛΗ ΣΥΝΘΗΚΗ true false ΑΝΑΘΕΣΗ a:=0 a:=1 Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2014 Σελίδα 7
Άσκηση 6 Να δείξετε ότι το Λήμμα της Άντλησης για ασυμφραστικές γλώσσες δεν μας βοηθά για να δείξουμε ότι η γλώσσα Λ = { a i b j c k d m i=0 ή j = k = m } δεν είναι ασυμφραστική. Ας υποθέσουμε ότι η γλώσσα Λ είναι ασυμφραστική και ότι p είναι το μήκος άντλησης αυτής. Ας θεωρήσουμε οποιαδήποτε λέξη της Λ w με μήκος w > p. Θέλουμε να δείξουμε ότι η λέξη w επιδέχεται άντλησης. Διακρίνουμε δύο περιπτώσεις: Αν w = b j c k d m για κάποιες τιμές των j, k, m, τότε οποιαδήποτε τμήματα και αν επιλέξουμε ως v και y και τα αντλήσουμε, τότε η λέξη θα συνεχίσει να ανήκει στη γλώσσα αφού ικανοποιεί τον περιορισμό ότι το πλήθος των a είναι 0. Αν w = a i b j c j d j, i 0, τότε και πάλι υπάρχει σπάσιμο την λέξης που ικανοποιεί το Λήμμα της Άντλησης, καθώς μπορούμε να επιλέξουμε το vxy εντός του a i, το οποίο έχουμε υποθέσει ότι δεν είναι κενό. Προφανώς, επανάληψη ή διαγραφή κάποιων a διατηρεί τη λέξη εντός της γλώσσα και το ζητούμενο έπεται. Εντούτοις, η γλώσσα αυτή δεν είναι ασυμφραστική (δείξτε το!). Λύσεις Σειράς Προβλημάτων 3 Εαρινό Εξάμηνο 2014 Σελίδα 8