Języki, automaty i obliczenia/Ćwiczenia 7: Twierdzenie Kleene'ego. Własności języków i gramatyk regularnych: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Arek (dyskusja | edycje)
Nie podano opisu zmian
Rogoda (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
==ĆWICZENIA 7==
==ĆWICZENIA 7==


{{cwiczenie|||
{{cwiczenie|1.1||
 
Niech <math>\displaystyle A = \{a,b\}</math>. Dla automatów<center><math>\displaystyle {\mathcal B} = (S_{\mathcal B},A,f_{\mathcal B},s_{\mathcal B},F_{\mathcal B}),\;\;\;\; {\mathcal C} =  
Niech <math>\displaystyle A = \{a,b\}</math>. Dla automatów<center><math>\displaystyle {\mathcal B} = (S_{\mathcal B},A,f_{\mathcal B},s_{\mathcal B},F_{\mathcal B}),\;\;\;\; {\mathcal C} =  
(S_{\mathcal C},A,f_{\mathcal C},s_{\mathcal C},F_{\mathcal C})</math></center>
(S_{\mathcal C},A,f_{\mathcal C},s_{\mathcal C},F_{\mathcal C})</math></center>
Linia 25: Linia 26:
Zauważ, że otrzymany automat nie jest minimalny. Jakie języki akceptują automaty <math>\displaystyle {\mathcal A}</math>, <math>\displaystyle {\mathcal B}</math> i <math>\displaystyle {\mathcal C}</math>?
Zauważ, że otrzymany automat nie jest minimalny. Jakie języki akceptują automaty <math>\displaystyle {\mathcal A}</math>, <math>\displaystyle {\mathcal B}</math> i <math>\displaystyle {\mathcal C}</math>?


{{cwiczenie|||
{{cwiczenie|1.2||
 
Niech <math>\displaystyle A = \{a,b\}</math>. Dla automatu <center><math>\displaystyle {\mathcal B} = (S_{\mathcal  
Niech <math>\displaystyle A = \{a,b\}</math>. Dla automatu <center><math>\displaystyle {\mathcal B} = (S_{\mathcal  
B},A,f_{\mathcal B},s_{\mathcal B},F_{\mathcal B}),</math></center>
B},A,f_{\mathcal B},s_{\mathcal B},F_{\mathcal B}),</math></center>
Linia 64: Linia 66:
Teraz wystarczy skonstruować równoważny  automat deterministyczny.
Teraz wystarczy skonstruować równoważny  automat deterministyczny.


{{cwiczenie|||
{{cwiczenie|1.3||
 
Dane są dwa automaty nad tym samym alfabetem <math>\displaystyle A</math><br>
Dane są dwa automaty nad tym samym alfabetem <math>\displaystyle A</math><br>
<math>\displaystyle \mathcal{A}=(S,f,s_{0},T)</math> i <math>\displaystyle \mathcal{B}=(Q,g,t_{0},F)</math>. Udowodnij,
<math>\displaystyle \mathcal{A}=(S,f,s_{0},T)</math> i <math>\displaystyle \mathcal{B}=(Q,g,t_{0},F)</math>. Udowodnij,
Linia 99: Linia 102:
[[##ja-lekcja8-c|Uzupelnic ja-lekcja8-c|]].
[[##ja-lekcja8-c|Uzupelnic ja-lekcja8-c|]].


{{cwiczenie|||
{{cwiczenie|1.4||
 
Niech <math>\displaystyle A</math> będzie dowolnym alfabetem, a <math>\displaystyle L \subset A^*</math> językiem regularnym. Udowodnij, że język
Niech <math>\displaystyle A</math> będzie dowolnym alfabetem, a <math>\displaystyle L \subset A^*</math> językiem regularnym. Udowodnij, że język
<math>\displaystyle L'=\{a^{|w|} :w \in L\}</math> jest też językiem regularnym.
<math>\displaystyle L'=\{a^{|w|} :w \in L\}</math> jest też językiem regularnym.
Linia 108: Linia 112:
a więc jest regularny.
a więc jest regularny.


{{cwiczenie|||
{{cwiczenie|1.5||
 
Udowodnij, że następujące języki nie są regularne:
Udowodnij, że następujące języki nie są regularne:
# <math>\displaystyle L = \{a^n : n \; \text{nie jest liczbą pierwszą\;} \}</math>,
# <math>\displaystyle L = \{a^n : n \; \text{nie jest liczbą pierwszą\;} \}</math>,
Linia 132: Linia 137:
ZADANIA DOMOWE   
ZADANIA DOMOWE   


{{cwiczenie|||
{{cwiczenie|1.6||
 
Niech <math>\displaystyle A = \{a,b\}</math>.  Skonstruuj automat <math>\displaystyle \mathcal A</math>, taki że
Niech <math>\displaystyle A = \{a,b\}</math>.  Skonstruuj automat <math>\displaystyle \mathcal A</math>, taki że
# <math>\displaystyle L({\mathcal A}) = L({\mathcal B}) \cup L({\mathcal C}),</math> gdzie <center><math>\displaystyle {\mathcal B} =  
# <math>\displaystyle L({\mathcal A}) = L({\mathcal B}) \cup L({\mathcal C}),</math> gdzie <center><math>\displaystyle {\mathcal B} =  
Linia 160: Linia 166:
}}
}}


{{cwiczenie|||
{{cwiczenie|1.7||
 
Skonstruuj minimalny automat <math>\displaystyle \mathcal{A}</math>, taki że  
Skonstruuj minimalny automat <math>\displaystyle \mathcal{A}</math>, taki że  
<math>\displaystyle L(\mathcal{A})=L(\mathcal{B})^*</math>, gdzie <math>\displaystyle \mathcal{B}</math> opisany jest  
<math>\displaystyle L(\mathcal{A})=L(\mathcal{B})^*</math>, gdzie <math>\displaystyle \mathcal{B}</math> opisany jest  
Linia 169: Linia 176:
}}
}}


{{cwiczenie|||
{{cwiczenie|1.8||
 
Udowodnij, że następujące języki nie są regularne:
Udowodnij, że następujące języki nie są regularne:
# <math>\displaystyle L=\left\{ a^{n}b^{m}c^n:0<n,m\right\}</math>,
# <math>\displaystyle L=\left\{ a^{n}b^{m}c^n:0<n,m\right\}</math>,
Linia 179: Linia 187:
}}
}}


{{cwiczenie|||
{{cwiczenie|1.9||
 
Zbuduj automat akceptujący język będący ogółem skończonych sekwencji  
Zbuduj automat akceptujący język będący ogółem skończonych sekwencji  
binarnych, w których liczba zer jest podzielna przez dwa, a liczba  
binarnych, w których liczba zer jest podzielna przez dwa, a liczba  

Wersja z 20:17, 23 sie 2006

ĆWICZENIA 7

Ćwiczenie 1.1

Niech A={a,b}. Dla automatów
=(S,A,f,s,F),𝒞=(S𝒞,A,f𝒞,s𝒞,F𝒞)
S={s,s1,s2},F={s2},S𝒞={s𝒞,s},F𝒞={s},

gdzie

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle \begin{array} {c|c|c|c|} f_{\mathcal B} &s_{\mathcal B} &s_1 & s_2 \\ \hline a & s_2 & s_1 & s_2 \\ \hline b & s_1 & s_1 & s_2\\ \hline \end{array} \hspace{2cm} \begin{array} {c|c|c|} f_{\mathcal C} &s_{\mathcal C} &s \\ \hline a & s & s \\ \hline b & s_{\mathcal C} & s_{\mathcal C} \\ \hline \end{array} }
skonstruuj automat 𝒜 taki, że
L(𝒜)=L()L(𝒞),

Rozwiązanie. L(𝒜)=(S×S𝒞,A,f𝒜,(s,s𝒞),F×F𝒞). Funkcja przejść zadana jest grafem

rys1

Zauważ, że otrzymany automat nie jest minimalny. Jakie języki akceptują automaty 𝒜, i 𝒞?

Ćwiczenie 1.2

Niech A={a,b}. Dla automatu
=(S,A,f,s,F),

gdzie

S={s,s1,s2},F={s1},

a funkcja przejść zdefiniowana jest następująco:

fss1s2as1s2s2bs1ss1

skonstruuj automat deterministyczny 𝒜 taki, że

L(𝒜)=L()*.

WSKAZÓWKA. Pomocne może być użycie automatu z pustymi przejściami.

ROZWIĄZANIE. Automat pokazany jest na rysunku Uzupelnic ja-lekcja7-c-rys2|.

RYSUNEK ja-lekcja7-c-rys2

Aby skonstruować automat akceptujący język L()*, wystarczy dodać przejście f(s1,1)=s (dlaczego?). Automat z pustymi przejściami akceptujący L()* pokazany jest na rysunku Uzupelnic ja-lekcja7-c-rys3|.

RYSUNEK ja-lekcja7-c-rys3

Po usunięciu pustych przejść otrzymujemy automat z rysunku Uzupelnic ja-lekcja7-c-rys4|:

RYSUNEK ja-lekcja7-c-rys4

Teraz wystarczy skonstruować równoważny automat deterministyczny.

Ćwiczenie 1.3

Dane są dwa automaty nad tym samym alfabetem A
𝒜=(S,f,s0,T) i =(Q,g,t0,F). Udowodnij, że istnieje liczba p0 taka, że jeśli dla każdego słowa w o długości |w|p spełniona jest implikacja wL(𝒜)wL(), to

L(𝒜)L()

ROZWIĄZANIE. Niech 𝒞 będzie automatem takim, że L(𝒞)=L(𝒜)L(). Wówczas,

L(𝒞)L()L(𝒜)L().

Udowodnimy więc inkluzję L(𝒞)L(), gdzie

𝒞=(S×Q,f×g,(s0,t0),(S×FT×Q)).

Przyjmijmy p=|S||Q|. Niech wL(𝒞)

  1. Jeśli |w|p, to z założenia wL()
  2. Jeśli |w|>p, to z lematu o pompowaniu wynika, że v1v2A*, uA+ takie, że w=v1uv2, v1v2L(𝒞) i |v1v2|<|w|.
(f×g)((s0,t0),w)=(f×g)((s0,t0),v1v2)=(f(s0,v1v2),g(t0,v1v2))S×FT×Q

Mamy dwie możliwości:

    1. g(t0,v1v2)F, co oznacza v1v2L(), wL(),
    2. f(s0,v1v2)T, co oznacza v1v2L(𝒜).

Jeśli |v1v2|<p, to v1v2L(), wL().
Jeśli |v1v2|>p, to powtarzamy punkt 2.

Po każdym kroku długość rozważanego słowa silnie maleje, więc po skończonej ilości kroków uzyskamy oczekiwany efekt.
Zauważ, że z zadania tego wynika rozstrzygalność problemu równoważności automatów. Algorytmiczny aspekt tego problemu rozważymy w ćwiczeniach Uzupelnic ja-lekcja8-c|.

Ćwiczenie 1.4

Niech A będzie dowolnym alfabetem, a LA* językiem regularnym. Udowodnij, że język L={a|w|:wL} jest też językiem regularnym.

Rozwiązanie. Rozważmy homomorfizm h:A*{a}* taki, że xAf(x)=a. Dla tak zdefiniowanego h język L jest homomorficzym obrazem języka regularnego L=h(L), a więc jest regularny.

Ćwiczenie 1.5

Udowodnij, że następujące języki nie są regularne:

  1. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L = \{a^n : n \; \text{nie jest liczbą pierwszą\;} \}} ,
  2. L={anbm:0n,m;nm}.

ROZWIĄZANIE punktu 1. Skorzystamy z faktu, że język Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L' = \{a^n : n \; \text{ jest liczbą pierwszą\;} \}} nie jest akceptowany ( ćwiczenie Uzupelnic ja-lekcja6-c cw1.8)|), a więc nie jest regularny.

a*=LL,LL=,a więcL=L.

Ponieważ klasa języków regularnych jest zamknięta ze względu na uzupełnienie, to L𝒢.

ROZWIĄZANIE punktu 2. Język L={anbn:0n} nie jest akceptowany (patrz przykład Uzupelnic ja-lekcja6-w ex3.1)|), a więc nie jest regularny.

a*b*=LL,LL=,a więcL=a*b*L.

Ponieważ klasa języków regularnych jest zamknięta ze względu na uzupełnienie i przecięcie, to L𝒢.

ZADANIA DOMOWE

Ćwiczenie 1.6

Niech A={a,b}. Skonstruuj automat 𝒜, taki że

  1. L(𝒜)=L()L(𝒞), gdzie
    =(S,A,f,s,F),𝒞=(S𝒞,A,f𝒞,s𝒞,F𝒞),
S={s,s1,s2},F={s2},S𝒞={s𝒞,s1,s2},F𝒞={s2},
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle \begin{array} {c|c|c|c|} f_{\mathcal B} &s_{\mathcal B} &s_1 & s_2 \\ \hline a & s_2 & s_1 & s_2 \\ \hline b & s_1 & s_1 & s_2\\ \hline \end{array} \hspace{2cm} \begin{array} {c|c|c|c|} f_{\mathcal C} &s_{\mathcal C} &{s'}_1&{s'}_2 \\ \hline a & {s'}_1 & {s'}_1& {s'}_2 \\ \hline b & {s'}_2 & {s'}_1& {s'}_2 \\ \hline \end{array} }
  1. L(𝒜)=L()*, gdzie
    =(S,A,f,s,F),
S={s,s1,s2,s3},F={s2},
fss1s2s3as1s3s3s3bs3s2s3s3

Podaj dwie konstrukcje:

  1. opartą na dowodzie twierdzenia Kleene'ego,
  2. z wykorzystaniem automatu z pustymi przejściami.

Ćwiczenie 1.7

Skonstruuj minimalny automat 𝒜, taki że L(𝒜)=L()*, gdzie opisany jest poniższym grafem:

RYSUNEK ja-lekcja7-c-rys5

Ćwiczenie 1.8

Udowodnij, że następujące języki nie są regularne:

  1. L={anbmcn:0<n,m},
  2. L={(ab)n(bc)n:n0}.

Punkt 2. WSKAZÓWKA. Wykorzystaj fakt, że język {anbn:n0} nie jest regularny oraz domkniętość klasy języków regularnych ze względu na homomorfizm.

Ćwiczenie 1.9

Zbuduj automat akceptujący język będący ogółem skończonych sekwencji binarnych, w których liczba zer jest podzielna przez dwa, a liczba jedynek przez 3, a następnie gramatykę generującą ten język.

WSKAZÓWKA. Stany automatu niech będą postaci (x,y), gdzie x{0,1}, y{0,1,2}. Stan początkowy to (0,0). Określ funkcję przejść w ten sposób, że po przeczytaniu przez automat słowa zawierającego k symboli 0 oraz l symboli 1 automat znajdzie się w stanie (kmod2,lmod3). Zastanów się, który stan będzie stanem końcowym. Na podstawie automatu określ gramatykę.