Solutii pentru exercise sheet 2

1. Fie $ fst(L) = \{ w \in \Sigma^\star \mid \exists x \in \Sigma^\star, a.î. wx \in L\ și\ |x| = |w| \}$. Arătați că $ fst$ este o proprietate de închidere pentru limbajele regulate.

Solutie:

Pentru a intelege mai bine $ fst(L)$ , il putem aplica pe un limbaj finit, dar si pe unul infinit:

  • $ fst(\{A,BAAB,AB\} = \{BA,A\}$
  • $ fst(L(A^*B^+)) = \{B,A,AA,BB,AB, \ldots \}$

Conditia $ \mid x\mid = \mid w\mid$ ne obliga sa identificam mijlocul cuvintelor din $ L$ . In figura de mai jos, pe primul rand, sunt prezentate doua AFN-uri: unul pentru limbajul $ L(A^*B^+)$ si cel pentru $ L(B^+A^*) = reverse(L(A^*B^+))$ .

Daca am putea executa, simultan, primul AFN pe cuvantul $ AABB$ , si al doilea AFN pe cuvantul $ BBAA$ , ambele automate ar ajunge in aceeasi stare dupa primele doua tranzitii (si consumarea prefixului $ AA$ ), ceea ce indica faptul ca $ AA \in fst(L(A^*B^+))$ .

Putem simula acest proces simultan construind un automat nou pentru limbajul $ fst(L)$ (ultimul rand din figura de mai jos pt exemplul nostru), plecand de la $ L(A) = L$ in care starile sunt de forma:

  • $ (q,X)$ unde $ q$ este o stare iar $ X$ este o multime de stari.
  • starea initiala este $ (q_0,F)$ - ceea ce indica faptul ca simulam automatul $ A$ incepand din starea lui initiala, si simultan din toate starile lui finale;
  • notam cu $ pre(X) = \{r \in K\mid \exists c \in \Sigma . \delta(c,r) \in X\}$ multimea tuturor predecesorilor unei stari din $ X$ (pe oricare simbol)
  • pentru fiecare stare $ Q = (q,X)$ si fiecare tranzitie $ \delta(q,c) = q'$ construim starea $ Q'=(q',pre(X))$ si tranzitia de la $ Q$ pe simbolul $ c$ catre $ Q'$ . Aceasta semnifica faptul ca, pentru fiecare pas-inainte al automatului $ A$ , pe simbolul $ c$ , urmarim si un pas inapoi catre toti predecesorii lui $ X$ .
  • fiecare stare $ (q,X)$ cu proprietatea ca $ q \in X$ este marcata ca stare finala (numarul de pasi-inainte este egal cu cel de pasi-inapoi.

Demonstratia ca automatul construit mai sus accepta exact $ fst(L)$ este lasata in continuare ca exercitiu.

2. Fie $ L_3 = \{ w \in \{0, 1\}^* \mid \#_{01}(w) = \#_{10}(w) \}$ (i.e. cuvintele conțin același număr de secvențe “01” și “10”). Demonstrați că $ L_3$ este regulat.

Solutie:

Scriem o expresie regulata pentru $ L_3$ . Pentru a gasi expresia corecta, putem incepe prin cateva observatii simple:

  • $ L(0^*) \subseteq L_3$
  • $ L(1^*) \subseteq L_3$
  • $ L(0^+1^+0^+)^* \subseteq L_3$
  • $ L(1^+0^+1^+)^* \subseteq L_3$

Ultimele 2 subpuncte acopera atat sirurile care incep cu 1 (si trebuie obligatoriu sa se termine cu un 1), respectiv cele care incep cu 0 (si se termina cu 0). Putem combina expresiile de mai sus intr-una singura, facand aparitia 1-urilor (respectiv 0-urilor) intercalate sa fie optionala. Rezultatul final este: $ (0^+1^*0^+)^* \cup (1^+0^*1^+)^* \cup 0 \cup 1$

3. Demonstrați că $ L = \{ a^nb^mc^{n-m} \mid n \ge m \ge 0 \}$ nu este un limbaj regulat, fără a folosi izomorfisme.

Solutie:

Daca notam $ k = n-m$ , atunci $ n = k + m$ iar limbajul devine: $ \{a^{k+m}b^mc^k \mid n,k \geq 0\}$ . Pentru a folosi lema de pompare, alegem cuvantul $ w_n = a^nb^n$ (numarul de $ c$ -uri este 0, deci numarul de $ a$ -uri este egal cu numarul de $ b$ -uri). De asemenea, alegem $ i=0$ . Cum $ \mid xy\mid \leq n$ , inseamna ca fragmentul $ y$ contine doar $ a$ -uri, asadar $ xy^0z$ va contine cel putin un $ b$ mai mult decat numarul de $ a$ -uri, deci cuvantul nu va apartine limbajului.

4. Demonstrați că, pentru orice limbaj $ L$ regulat și infinit, există două limbaje $ L_1$, $ L_2$ regulate și infinite, astfel încât $ L_1 \cap L_2 = \emptyset$ și $ L_1 \cup L_2 = L$.

Solutie:

Daca $ L$ este un limbaj regulat infinit, atunci Lema de Pompare este adevarata pentru acesta, cu alte cuvinte $ \exists n$ astfel incat pentru orice cuvant $ w$ avand lungime mai mare sau egala cu $ n$ , acesta poate fi impartit in $ xyz$ astfel incat $ \mid xy\mid \leq n$ , $ y\neq\epsilon$ si \math[\forall k. xy^kz\in L]. Demonstratia Lemei de Pompare arata ca un astfel de $ n$ poate fi numarul de stari ale unui AFD care accepta $ L$ . Urmarind acelasi rationament, toate cuvintele suficient de mari sunt acceptate prin traversarea unei stari de cel putin doua ori:

$ (q_0,xyz) \vdash^* (q,yz) \vdash^* (q,z) \vdash (q_f, \epsilon)$

Plecand de la AFD-ul $ A$ care respecta conditia de mai sus, si de la un ciclu din acesta, de forma $ q, q_1, q_2, \ldots q_k, q$ , construim doua AFD-uri:

  • $ A_1$ care contine aceleasi stari precum $ A$ , plus starile $ q', q'_1, q'_2, \ldots q'_k$ . Tranzitia de la $ q_k$ la $ q$ este modificata catre $ q'$ , iar cea de la $ q'_k$ - catre $ q$ . Restul tranzitiilor adaugate functioneaza exact ca cele din ciclul automatului $ A$ . $ L(A_1)$ va accepta toate cuvintele mai mici decat $ n$ , precum si cele de forma $ xy^{2k}z$ (in urma loop-unrolling-ului).
  • $ A_2$ va fi construit dupa aceeasi strategie, astfel incat sa accepte doar cuvintele de forma $ xy^{2k+1}z$ :
    • caile mai scurte de $ k$ de la starea initiala la o stare finala vor fi eliminate.
    • toate celelalte caile care nu trec prin $ q$ si care ajung la o stare finala vor fi eliminate. In felul acesta, avem garantia ca $ L(A_1) \cap L(A_2) = \emptyset$
  • in acelasi timp $ L(A_1) \cup L(A_2) = L(A)$