✖

Παράθεση κανονικών γλωσσών

Έστω δύο κανονικές γλώσσες L1, L2. Θα αποδείξουμε ότι η παράθεσή τους (συνένωση) L = L1 ∘ L2 είναι επίσης κανονική γλώσσα.

Τι είναι η συνένωση

Αν παραθέσουμε τις λέξεις «010» και «1111», προκύπτει η λέξη «0101111». Με την παράθεση γλωσσών προκύπτει μια νέα γλώσσα, που τη φτιάχνουμε παραθέτοντας κάθε λέξη της μιας γλώσσας με κάθε λέξη της άλλης. Την παράθεση δύο λέξεων και δύο γλωσσών θα τη συμβολίζουμε με ένα κυκλάκι: ∘. Τότε μπορούμε να ορίσουμε την παράθεση των γλωσσών L1 και L2 ως εξής:

L1∘L2={a∘b|a∈L1,b∈L2}

Η ιδέα της απόδειξης

Έχουμε δύο κανονικές γλώσσες L1, L2 και δύο αυτόματα που τις αποδέχονται:

A1=⟨Q1,Σ1,δ1,q0,F1⟩A2=⟨Q2,Σ2,δ2,p0,F2⟩

Θα κατασκευάσουμε ένα μη ντετερμινιστικό αυτόματο A = ⟨Q, Σ, δ, q, F⟩ που θα «περιέχει μέσα του» και τα δύο αυτόματα A1 και A2. Η βασική ιδέα είναι ότι αρχίζουμε να διαβάζουμε τη λέξη με το αυτόματο A1 και, όταν το αυτόματο A1 φτάσει σε τελική κατάσταση, δοκιμάζουμε αν το υπόλοιπο της λέξης το αποδέχεται το αυτόματο A2. Αν και αυτό το αυτόματο αποδέχεται το υπόλοιπο της λέξης, τότε το αυτόματο A αποδέχεται τη λέξη.

Παράδειγμα

Έστω το αυτόματο A1, που αποδέχεται τις μη κενές λέξεις που αποτελούνται μόνο από μηδενικά και τις λέξεις που αποτελούνται από μια μονάδα, μετά την οποία ακολουθούν μόνο μηδενικά (1, 10, 100, …):

και το αυτόματο A2, που αποδέχεται τις λέξεις που τελειώνουν σε 01:

Συνδέουμε τα αυτόματα προσθέτοντας από όλες τις τελικές καταστάσεις του A1 ε-μεταβάσεις προς την αρχική κατάσταση του A2 και στη συνέχεια κάνουμε τις τελικές καταστάσεις του A1 απλές καταστάσεις. Η αρχική κατάσταση ολόκληρου του νέου αυτομάτου θα είναι η αρχική κατάσταση του A1:

Πώς θα λειτουργεί το αυτόματο; Αρχίζουμε να προσομοιώνουμε τη λειτουργία του αυτομάτου A1. Αν περάσουμε σε μια πρώην τελική κατάσταση q1 ή q2, ξέρουμε ότι το αυτόματο A1 αποδέχεται ένα μέρος αυτής της λέξης. Για να ανήκει ολόκληρη η λέξη στη γλώσσα L1 ∘ L2, το υπόλοιπο της λέξης πρέπει να το αποδεχτεί το δεύτερο αυτόματο A2 – γι' αυτό από όλες τις πρώην τελικές καταστάσεις οδηγούν ε-μεταβάσεις στην αρχική κατάσταση του αυτομάτου A2.

Ας πάρουμε για παράδειγμα τη λέξη 0001. Ανήκει στην παράθεση των δύο γλωσσών, επειδή η λέξη μπορεί να προκύψει από την παράθεση των λέξεων 00 ∘ 01. Μπορεί όμως εξίσου να προκύψει από την παράθεση των λέξεων 0 ∘ 001. Στο αυτόματό μας μπορούμε να προσομοιώσουμε και τους δύο τρόπους. Το αυτόματο μπορεί να ακολουθήσει αυτή τη διαδρομή:

q0→0q1→0q1→εp0→0p1→1p2

Σε αυτή τη διαδρομή το αυτόματο θα «αποδεχόταν» πρώτα το μέρος 00 της λέξης και μετά το μέρος 01. Ή μπορεί να ακολουθήσει αυτή τη διαδρομή:

q0→0q1→εp0→0p0→0p1→1p2

και το αυτόματο θα «αποδεχόταν» πρώτα το μέρος 0 της λέξης και μετά το μέρος 001. Και στις δύο περιπτώσεις φυσικά καταλήγουμε στην τελική κατάσταση p2.

Αυστηρή διατύπωση της μεθόδου

Ξανά: Έχουμε δύο κανονικές γλώσσες L1, L2 και δύο αυτόματα που τις αποδέχονται:

A1=⟨Q1,Σ1,δ1,q0,F1⟩A2=⟨Q2,Σ2,δ2,p0,F2⟩

Κατασκευάζουμε το μη ντετερμινιστικό αυτόματο A = ⟨Q, Σ, δ, q, F⟩, για το οποίο ισχύει:

  • Q = Q1 ∪ Q2 (υποθέτουμε επίσης ότι Q1 ∩ Q2 = ∅)
  • Σ= Σ1 ∪ Σ2
  • q = q0
  • F = F2

Τη συνάρτηση μετάβασης δ τη φτιάχνουμε σταδιακά:

δ(q,a)={δ1(q,a)ανq∈Q1∧q∉F1δ1(q,a)ανq∈F1∧a≠εδ1(q,a)∪{p0}ανq∈F1∧a=εδ2(q,a)ανq∈Q2

Πηγές

Κεφάλαια: Κλειστότητα κανονικών γλωσσών, Ένωση, Τομή, Διαφορά, Συμπλήρωμα, Παράθεση, Κλειστότητα Kleene