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
Rogoda (dyskusja | edycje)
Nie podano opisu zmian
Rogoda (dyskusja | edycje)
Nie podano opisu zmian
Linia 25: Linia 25:


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>?
 
</div></div>
{{cwiczenie|1.2||
{{cwiczenie|1.2||


Linia 45: Linia 45:
}}
}}


WSKAZÓWKA. Pomocne może być użycie automatu z pustymi przejściami.
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">Pomocne może być użycie automatu z pustymi przejściami.
 
</div></div>
ROZWIĄZANIE. Automat <math>\displaystyle \mathcal{B}</math> pokazany jest na rysunku  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">
[[##ja-lekcja7-c-rys2|Uzupelnic ja-lekcja7-c-rys2|]].
Automat <math>\displaystyle \mathcal{B}</math> pokazany jest na rysunku [[##ja-lekcja7-c-rys2|Uzupelnic ja-lekcja7-c-rys2|]].


RYSUNEK ja-lekcja7-c-rys2
RYSUNEK ja-lekcja7-c-rys2
Linia 65: Linia 65:


Teraz wystarczy skonstruować równoważny  automat deterministyczny.
Teraz wystarczy skonstruować równoważny  automat deterministyczny.
 
</div></div>
{{cwiczenie|1.3||
{{cwiczenie|1.3||


Linia 78: Linia 78:
}}
}}


ROZWIĄZANIE.
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">
Niech <math>\displaystyle \mathcal{C}</math> będzie automatem takim, że <math>\displaystyle L(\mathcal{C})=L(\mathcal{A})\cup L(\mathcal{B})</math>. Wówczas,   
Niech <math>\displaystyle \mathcal{C}</math> będzie automatem takim, że <math>\displaystyle L(\mathcal{C})=L(\mathcal{A})\cup L(\mathcal{B})</math>. Wówczas,   
<center><math>\displaystyle L(\mathcal{C})\subseteq L(\mathcal{B})\Leftrightarrow L(\mathcal{A})\subseteq L(\mathcal{B}).</math></center>
<center><math>\displaystyle L(\mathcal{C})\subseteq L(\mathcal{B})\Leftrightarrow L(\mathcal{A})\subseteq L(\mathcal{B}).</math></center>
Linia 101: Linia 101:
rozstrzygalność problemu równoważności automatów.  Algorytmiczny aspekt tego problemu rozważymy w ćwiczeniach  
rozstrzygalność problemu równoważności automatów.  Algorytmiczny aspekt tego problemu rozważymy w ćwiczeniach  
[[##ja-lekcja8-c|Uzupelnic ja-lekcja8-c|]].
[[##ja-lekcja8-c|Uzupelnic ja-lekcja8-c|]].
 
</div></div>
{{cwiczenie|1.4||
{{cwiczenie|1.4||


Linia 108: Linia 108:
}}
}}


Rozwiązanie. Rozważmy homomorfizm <math>\displaystyle h:A^* \longrightarrow \{a\}^*</math> taki, że <math>\displaystyle \forall  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">
Rozważmy homomorfizm <math>\displaystyle h:A^* \longrightarrow \{a\}^*</math> taki, że <math>\displaystyle \forall  
x \in A\displaystyle f(x)=a</math>. Dla tak zdefiniowanego <math>\displaystyle h</math> język <math>\displaystyle L'</math> jest homomorficzym obrazem języka regularnego  <math>\displaystyle L'=h(L)</math>,  
x \in A\displaystyle f(x)=a</math>. Dla tak zdefiniowanego <math>\displaystyle h</math> język <math>\displaystyle L'</math> jest homomorficzym obrazem języka regularnego  <math>\displaystyle L'=h(L)</math>,  
a więc jest regularny.
a więc jest regularny.
 
</div></div>
{{cwiczenie|1.5||
{{cwiczenie|1.5||


Linia 120: Linia 121:
}}
}}


ROZWIĄZANIE punktu 1. Skorzystamy z faktu, że język <math>\displaystyle L' = \{a^n : n  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie punktu 1</span><div class="mw-collapsible-content" style="display:none">
Skorzystamy z faktu, że język <math>\displaystyle L' = \{a^n : n  
\; \text{ jest liczbą pierwszą\;} \}</math> nie jest akceptowany (
\; \text{ jest liczbą pierwszą\;} \}</math> nie jest akceptowany (
ćwiczenie [[##ja-lekcja6-c cw1.8)|Uzupelnic ja-lekcja6-c cw1.8)|]]), a więc nie  jest regularny.  
ćwiczenie [[##ja-lekcja6-c cw1.8)|Uzupelnic ja-lekcja6-c cw1.8)|]]), a więc nie  jest regularny.  
Linia 127: Linia 129:
Ponieważ klasa języków regularnych jest zamknięta ze względu na  
Ponieważ klasa języków regularnych jest zamknięta ze względu na  
uzupełnienie, to  <math>\displaystyle  L \notin \mathcal{REG}</math>.
uzupełnienie, to  <math>\displaystyle  L \notin \mathcal{REG}</math>.
 
</div></div>
ROZWIĄZANIE punktu 2. Język <math>\displaystyle L'=\left\{ a^{n}b^{n}:0\leq n \right\} </math> nie jest  akceptowany  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie punktu 2</span><div class="mw-collapsible-content" style="display:none">
Język <math>\displaystyle L'=\left\{ a^{n}b^{n}:0\leq n \right\} </math> nie jest  akceptowany  
(patrz przykład [[##ja-lekcja6-w ex3.1)|Uzupelnic ja-lekcja6-w ex3.1)|]]), a więc nie  jest regularny.
(patrz przykład [[##ja-lekcja6-w ex3.1)|Uzupelnic ja-lekcja6-w ex3.1)|]]), a więc nie  jest regularny.
<center><math>\displaystyle a^*b^* =L \cup L',L\cap L' = \emptyset,\;\text {a więc}\;L'=a^* b^* \cap\overline{L}.</math></center>
<center><math>\displaystyle a^*b^* =L \cup L',L\cap L' = \emptyset,\;\text {a więc}\;L'=a^* b^* \cap\overline{L}.</math></center>
Linia 134: Linia 137:
Ponieważ klasa języków regularnych jest zamknięta ze względu na  
Ponieważ klasa języków regularnych jest zamknięta ze względu na  
uzupełnienie i przecięcie, to  <math>\displaystyle  L \notin \mathcal{REG}</math>.
uzupełnienie i przecięcie, to  <math>\displaystyle  L \notin \mathcal{REG}</math>.
 
</div></div>
ZADANIA DOMOWE   
ZADANIA DOMOWE   


Linia 181: Linia 184:
# <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>,
# <math>\displaystyle L = \{(ab)^n(bc)^n : n \geq 0 \}</math>. <br>
# <math>\displaystyle L = \{(ab)^n(bc)^n : n \geq 0 \}</math>. <br>
Punkt 2. WSKAZÓWKA.
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka do punktu 2 </span><div class="mw-collapsible-content" style="display:none">
Wykorzystaj fakt, że język <math>\displaystyle \left\{ a^{n}b^{n}:n \geq 0\right\} </math> nie jest regularny oraz
Wykorzystaj fakt, że język <math>\displaystyle \left\{ a^{n}b^{n}:n \geq 0\right\} </math> nie jest regularny oraz
domkniętość klasy języków regularnych ze względu na homomorfizm.
domkniętość klasy języków regularnych ze względu na homomorfizm.
 
</div></div>
}}
}}
{{cwiczenie|1.9||
{{cwiczenie|1.9||


Linia 193: Linia 195:
jedynek przez 3, a następnie gramatykę generującą ten język.
jedynek przez 3, a następnie gramatykę generującą ten język.


WSKAZÓWKA. Stany automatu niech będą postaci <math>\displaystyle (x,y)</math>, gdzie <math>\displaystyle x \in  
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none">
Stany automatu niech będą postaci <math>\displaystyle (x,y)</math>, gdzie <math>\displaystyle x \in  
\{0, 1\}</math>, <math>\displaystyle y \in \{0, 1, 2\}</math>. Stan początkowy to <math>\displaystyle (0,0)</math>. Określ  
\{0, 1\}</math>, <math>\displaystyle y \in \{0, 1, 2\}</math>. Stan początkowy to <math>\displaystyle (0,0)</math>. Określ  
funkcję przejść w ten sposób, że po przeczytaniu przez automat słowa  
funkcję przejść w ten sposób, że po przeczytaniu przez automat słowa  
Linia 199: Linia 202:
w stanie <math>\displaystyle (k \mod 2, l \mod 3)</math>. Zastanów się, który stan będzie  
w stanie <math>\displaystyle (k \mod 2, l \mod 3)</math>. Zastanów się, który stan będzie  
stanem końcowym. Na podstawie automatu określ gramatykę.
stanem końcowym. Na podstawie automatu określ gramatykę.
 
}}</div>
}}

Wersja z 21:42, 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
Rozwiązanie

Ć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

Ć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

Ć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
Rozwiązanie punktu 2

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

{{{3}}}

Ćwiczenie 1.9

{{{3}}}