Języki, automaty i obliczenia/Ćwiczenia 4: Wyrażenia regularne. Automat minimalny

Z Studia Informatyczne
Wersja z dnia 14:56, 9 sie 2006 autorstwa Rogoda (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

ĆWICZENIA 4

Ćwiczenie [Uzupelnij]

Pokaż, że każdy skończony zbiór słów nad dowolnym alfabetem jest regularny, tzn. jest określony przez pewne wyrażenie regularne.

ROZWIĄZANIE. Niech L={w1,w2,...,wn} będzie skończonym zbiorem słów nad pewnym alfabetem A. Wtedy wyrażenie regularne

α=w1+w2+...+wn

jest wyrażeniem regularnym określającym

zbiór L.

Ćwiczenie [Uzupelnij]

Sprawdź, czy język L ciągów binarnych, w których sekwencja 11 występuje dokładnie raz, da się określić wyrażeniem regularnym.

ROZWIĄZANIE. Przykładowym wyrażeniem regularnym opisującym ten język

jest wyrażenie

(0*+0*10)*11(0*+00*1)*.

Ćwiczenie [Uzupelnij]

Udowodnij równoważności wyrażeń regularnych (α, β i γ są dowolnymi wyrażeniami regularnymi).

  1. α+α=α,
  1. α+β=β+α,
  1. αα*=α*α,
  1. (α*β*)*=(α+β)*,
  1. (1+α)*=α*,
  1. (α*+β*)*=(α+β)*.

ROZWIĄZANIE punktu 1. Należy pokazać, że

|α+α|=|α|

. Obliczamy:

|α+α|=|α||α|=|α|.

ROZWIĄZANIE punktu 2.

|α+β|=|α||β|=|β||α|=|β+α|.

Skorzystaliśmy tu z

przemienności sumy mnogościowej.

ROZWIĄZANIE punktu 3.

|αα*|=|α||α|*=|α|+=|α|*|α|=|α*α|.

Zauważ, że druga równość jest prawdziwa dlatego, że po obu stronach operatora katenacji występuje wyrażenie α. Równość ta nie zachodzi w dowolnym przypadku, tzn. |α||β*|=|β||α|*.

ROZWIĄZANIE punktu 4. Niech L będzie językiem złożonym ze słów postaci y=y1y2...yn,n0 takich, że każde yi należy do języka opisanego wyrażeniem regularnym α lub β. W oczywisty sposób L opisany jest wyrażeniem regularnym (α+β)*. Zapiszmy teraz elementy L w inny sposób: dla każdego y=y1...ynL "pogrupujmy" wszystkie podsłowa yi należące do języka opisywanego wyrażeniem α, które w słowie y1y2...yn występują obok siebie. To samo zróbmy ze słowami należącymi do języka opisywanego wyrażeniem β. Zatem y=(ya1yb1)...(yakybk), gdzie każde yaj należy do |α*|, a każde ybj należy do |β*|, gdyż każde yaj (ybj) może być katenacją dowolnej ilości słów należących do języka opisywanego wyrażeniem α (odpowiednio: β). W szczególności niektóre yaj oraz ybj mogą być słowami pustymi. Ponadto k może być dowolnie duże. Zbiór słów (ya1yb1)...(yakybk) jest więc opisywany wyrażeniem (α*β*)*, przy czym wyrażenie w nawiasie "odpowiada" pojedynczej sekwencji yajybj, a gwiazdka przy nawiasie "odpowiada" konkatenacji dowolnej ilości takich słów. Ale ten zbiór słów to język L. Otrzymujemy zatem L=|(α+β)*|=|(α*β*)*|. Zatem wyrażenia są równoważne.

ROZWIĄZANIE punktu 5. Równość wynika z faktu, że α 1|α|*.

ROZWIĄZANIE punktu 6. Użyj rozumowania podobnego do tego z rozwiązania punktu 4.

Ćwiczenie [Uzupelnij]

Udowodnij, że dla dowolnych wyrażeń regularnych α, β i γ wyrażenia

αβ+γ*,(αβ+γ)*orazα(β+γ)*

nie są równoważne.

ROZWIĄZANIE 1|α(β+γ)*|, natomiast należy do dwóch pozostałych wyrażeń.
|αβγ||(αβ+γ)*| i |αβγ||αβ+γ*|

Ćwiczenie [Uzupelnij]

Sprawdź, czy następujące wyrażenia regularne są równoważne (α oraz β są dowolnymi wyrażeniami regularnymi.)

  1. (αβ+α)*α=α(βα+α)*,
  1. β(αβ+β)*α=αα*β(αα*β)*,
  1. (βα*)*=β(α+β)*+1,

ROZWIĄZANIE punktu 1. Każde słowo w opisane wyrażeniem po lewej stronie równości zapisać można jako słowo opisane wyrażeniem (αγ)(αγ)...(αγ)α, gdzie γ=β lub γ=1 i czynników postaci (αγ) może być dowolnie dużo, w zależności od postaci słowa w (w szczególności może nie występować ani jeden; wtedy wyrażenie przyjmie postać α). Każde słowo w opisane wyrażeniem stojącym po prawej stronie równości można zapisać jako słowo opisane wyrażeniem α(γα)...(γα)(γα), gdzie γ=β lub γ=1 i tak jak w poprzednim przypadku, zależnie od słowa w czynników (γα) może być dowolnie dużo. Usuwając nawiasy widzimy, że dla każdego słowa w wyrażenia te są sobie równe, zatem (αβ+α)*α=α(βα+α)*.

ROZWIĄZANIE punktu 2. Wyrażenia nie są równoważne, gdyż to stojące po lewej stronie równości rozpoczyna się od β, a to stojące po prawej stronie równości - od α.

ROZWIĄZANIE punktu 3. Wyrażenie (βα*)* opisuje słowa postaci b1x1b2x2...bnxn, gdzie n0, a każde xi jest postaci a1i...ak(i)i, gdzie k(i)0. Słowa bi opisywane są wyrażeniem β, każde xi opisywane jest wyrażeniem α*, a każde ai - wyrażeniem α. Wyrażenie β(α+β)*+1 opisuje natomiast słowa postaci 1 lub b1y1y2...yn gdzie n0, bi opisywane jest wyrażeniem β, a każde y1 jest słowem opisywanym wyrażeniem α lub β.

Jeśli słowo jest postaci b1x1b2x2...bnxn, to widać, że opisane jest także przez wyrażenie stojące po prawej stronie równości, gdyż xi=a1ia2i...ak(i)i może być reprezentowane przez słowo złożone z podsłów postaci y1i...yk(i)i, przyjmując yji=aji, 1jk(i), k(i)0, natomiast każde bj może być reprezentowane przez słowo yj przyjmując yj=bj.

Na odwrót, każde słowo postaci b1y1y2...yn można opisać wyrażeniem stojącym po lewej stronie równości, grupując wszystkie yi występujące obok siebie i opisywane wyrażeniem α i każdą taką grupę reprezentować jako pewne xi, a każde yi opisywane wyrażeniem β reprezentować jako pewne bi.

Ćwiczenie [Uzupelnij]

Określ za pomocą wyrażeń regularnych następujące języki:

  1. wszystkie czteroliterowe słowa nad alfabetem

A={a,b,c,d},

  1. wszystkie trzyliterowe słowa nad alfabetem

A={a,b,c,d}, w których występuje dokładnie jedna litera a,

  1. wszystkie słowa o dowolnej długości nad alfabetem

A={a,b,c,d}, w których występuje dokładnie jedna litera a,

  1. język poprawnych adresów stron www, jeśli założymy, że poprawny adres strony www składa

się ze słowa "http:Parser nie mógł rozpoznać (nieznana funkcja „\slash”): {\displaystyle \slash \slash} www.", a następnie ciągu liter i cyfr zawierającego przynajmniej jedną kropkę, przy czym ostatnim znakiem tego ciągu nie może być kropka.

  1. ogół sekwencji binarnych, w których liczba zer jest podzielna

przez 3,

ROZWIĄZANIE punktu 1. α=(a+b+c+d)(a+b+c+d)(a+b+c+d)(a+b+c+d).

ROZWIĄZANIE punktu 2. β=a(b+c+d)(b+c+d)+(b+c+d)a(b+c+d)+(b+c+d)(b+c+d)a.

ROZWIĄZANIE punktu 3. β=(b+c+d)*a(b+c+d)*.

ROZWIĄZANIE punktu 4. Wyrażenie opisujące zbiór wszystkich takich adresów może mieć postać:

Parser nie mógł rozpoznać (nieznana funkcja „\slash”): {\displaystyle \gamma=http:\slash \slash www.(a+b+...+z+0+...+9)^+(.(a+b+...+z+0+...+9)^+)^+}

ROZWIĄZANIE punktu 5. δ=(1*01*01*01*)*.

Dla uproszczenia, zgodnie z umową przyjętą na wykładzie, jeśli język L=|α| dla pewnego wyrażenia regularnego α, to L będziemy zapisywać jako α.

Ćwiczenie [Uzupelnij]

Niech L będzie językiem określonym przez wyrażenie regularne a*ba* nad alfabetem A={a,b} . Określ prawą kongruencję syntaktyczną PLr i kongruencję syntaktyczną PL dla tego języka.

ROZWIĄZANIE. Widać, że dwa słowa będą należały do tej samej klasy abstrakcji relacji PLr, jeśli będą miały taką samą ilość liter b. Zatem Parser nie mógł rozpoznać (nieznana funkcja „\slash”): {\displaystyle L \slash P_L^r = \{[1],[b],[bb]\}} , gdzie
[1]=a*,
[b]=a*ba*,
[bb]=A*bA*bA*

Dla języka L=a*ba* jest PLr=PL.

Ćwiczenie [Uzupelnij]

Wykorzystując ciąg relcji zdefiniowanych w twierdzeniu Uzupelnic lekcja4-w-tw3.3 | określ prawą kongruencję syntaktyczną PLr dla następujących języków.

  1. L=(a2)*
  1. L=a(a+b)*+(a+b)*b

ROZWIĄZANIE punktu 1.
ρ1: (a2)*, a*(a2)*=(a2)*a
ρ2=ρ1=PLr

ROZWIĄZANIE punktu 2.

ρ1
a(a+b)*+(a+b)*b=a(a+b)*a+b(a+b)*b+a(a+b)*b+a+b,

(a+b)*a(a+b)*+(a+b)*b=b(a+b)*a+1

ρ2
b(a+b)*b+b,
a(a+b)*a+a(a+b)*b+a,
b(a+b)*a,
1,

ρ3=ρ2=PLr

Ćwiczenie [Uzupelnij]

Zdefiniuj minimalny automat akceptujący następujące języki:

  1. L=(a2)*
  1. L=a(a+b)*+(a+b)*b

ROZWIĄZANIE. Zgodnie z wnioskiem lekcja4-w wniosek 3.1 automat minimalny rozpoznający język L ma postać

𝒜L=(A*/PLr,f*,[1]PLr,T),

gdzie T={[w]PLr:wL},. Korzystając z ćwiczenia Uzupelnic 4.7|. dostajemy

  1. S={s0,s1}, gdzie
    s0=(a2)*,s1=(a2)*a,
    a działanie automatu określone jest poprzez graf

RYSUNEK ja-lekcja4-c-rys1.JPG

  1. S={s0,s1,s2,s3}, gdzie
    s0=1,s1=b(a+b)*a,
s2=a(a+b)*a+a(a+b)*b+a,s3=b(a+b)*b+b,

a działanie automatu określone jest poprzez graf
RYSUNEK ja-lekcja4-w-rys2.pdf

ZADANIA DOMOWE

Ćwiczenie [Uzupelnij]

Udowodnij równoważności wyrażeń regularnych (α, β i γ są dowolnymi wyrażeniami regularnymi).

  1. (α+β)+γ=α+(β+γ),
  1. (αβ)γ=α(βγ),
  1. (α+β)γ=αγ+βγ,
  1. (α*)*=α*,

Ćwiczenie [Uzupelnij]

Sprawdź, czy następujące wyrażenia regularne są równoważne (α oraz β są dowolnymi wyrażeniami regularnymi.)

  1. (α+β)*=α*+β*.
  1. (α*β)*α*=(α+β)*,
  1. (α+β*)*=(α*β*)*,
  1. α(αβ+β)*α=αα*β(αα*β)*α,
  1. α(αβ+β)*α=α(βα+α)*.

Ćwiczenie [Uzupelnij]

Określ za pomocą wyrażeń regularnych następujące języki:

  1. ogół sekwencji binarnych, w których występują co najwyżej trzy zera,
  1. ogół sekwencji binarnych, w których występują co najwyżej dwa zera obok siebie,
  1. ogół sekwencji binarnych, w których liczba zer jest podzielna

przez dwa, a liczba jedynek przez 3,

  1. język poprawnych adresów e-mail. Dla uproszczenia przyjmujemy,

że poprawny adres e-mailowy składa się z niepustego identyfikatora złożonego z samych liter (maksymalnie z czterech), znaku "małpy", niepustej nazwy serwera złożonej z samych liter (maksymalnie czterech), kropki oraz dwuliterowej nazwy domeny. Alfabet składa się tylko z liter a, b i c.

Ćwiczenie [Uzupelnij]

Wykorzystując ciąg relcji zdefiniowanych w twierdzeniu lekcja4-w-tw? określ prawą kongruencję syntaktyczną PLr dla następujących języków.

  1. L=ab
  1. L=(a+b)*ab(a+b)*

Ćwiczenie [Uzupelnij]

Zdefiniuj minimalny automat akceptujący następujące języki:

  1. L=ab
  1. L=(a+b)*ab(a+b)*