Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lfa:exercise-sheet-2-solution [2021/01/18 17:41]
pdmatei
lfa:exercise-sheet-2-solution [2021/01/18 19:29] (current)
pdmatei
Line 47: Line 47:
 //​**Solutie:​**//​ //​**Solutie:​**//​
  
 +Daca $math[L] este un limbaj regulat infinit, atunci Lema de Pompare este adevarata pentru acesta, cu alte cuvinte $math[\exists n] astfel incat pentru orice cuvant $math[w] avand lungime mai mare sau egala cu $math[n], acesta poate fi impartit in $math[xyz] astfel incat $math[\mid xy\mid \leq n], $math[y\neq\epsilon] si \math[\forall k. xy^kz\in L]. Demonstratia Lemei de Pompare arata ca un astfel de $math[n] poate fi numarul de stari ale unui AFD care accepta $math[L]. Urmarind acelasi rationament,​ toate cuvintele //suficient de mari// sunt acceptate //prin traversarea unei stari// de cel putin doua ori:
  
 +$math[(q_0,​xyz) \vdash^* (q,yz) \vdash^* (q,z) \vdash (q_f, \epsilon)]
 +
 +Plecand de la AFD-ul $math[A] care respecta conditia de mai sus, si de la //un ciclu// din acesta, de forma $math[q, q_1, q_2, \ldots q_k, q], construim doua AFD-uri:
 +  * $math[A_1] care contine aceleasi stari precum $math[A], plus starile $math[q',​ q'_1, q'_2, \ldots q'_k]. Tranzitia de la $math[q_k] la $math[q] este modificata catre $math[q'​],​ iar cea de la $math[q'​_k] - catre $math[q]. Restul tranzitiilor adaugate functioneaza exact ca cele din ciclul automatului $math[A]. $math[L(A_1)] va accepta toate cuvintele mai mici decat $math[n], precum si cele de forma $math[xy^{2k}z] (in urma loop-unrolling-ului).
 +  * $math[A_2] va fi construit dupa aceeasi strategie, astfel incat sa accepte **doar** cuvintele de forma $math[xy^{2k+1}z]:​
 +    * caile mai scurte de $math[k] de la starea initiala la o stare finala vor fi eliminate.
 +    * toate celelalte caile care nu trec prin $math[q] si care ajung la o stare finala vor fi eliminate. In felul acesta, avem garantia ca $math[L(A_1) \cap L(A_2) = \emptyset]
 +  * in acelasi timp $math[L(A_1) \cup L(A_2) = L(A)]