Języki i automaty część 5.

Slides:



Advertisements
Podobne prezentacje
Lingwistyka Matematyczna
Advertisements

Joanna Sawicka Wydział Nauk Ekonomicznych, Uniwersytet Warszawski
Programowanie w PMC.
Obserwowalność System ciągły System dyskretny
Grażyna Mirkowska PJWSTK, 10 stycznia 2001
Grażyna Mirkowska PJWSTK 15 listopad 2000
Wykład 10 Metody Analizy Programów Specyfikacja Struktur Danych
Rozdział V - Wycena obligacji
Programowanie I Rekurencja.
Analiza Składniowa Wstępująca
MS Access 2000 Normalizacja Paweł Górczyński 2005.
Lingwistyka Matematyczna
Metoda pierwszeństwa operatorów
Liczby Pierwsze - algorytmy
ZLICZANIE cz. II.
Języki formalne i gramatyki
Macierze Maria Guzik.
ATOM WODORU, JONY WODOROPODOBNE; PEŁNY OPIS
Tablice.
Metody Sztucznej Inteligencji w Sterowaniu 2009/2010 Metoda propagacji wstecznej Dr hab. inż. Kazimierz Duzinkiewicz, Katedra Inżynierii Systemów Sterowania.
Java – programowanie obiektowe
PHP wprowadzenie.
Zapis informacji Dr Anna Kwiatkowska.
Matematyka.
Podstawy programowania
Podstawy układów logicznych
ANALIZA LEKSYKALNA. Zadaniem analizatora leksykalnego jest przetwarzanie danych pochodzących ze strumienia wejściowego a także rozpoznawanie ciągów znaków.
Wyrażenia algebraiczne
IV OTWARTE MISTRZOSTWA OPOLA W PROGRAMOWANIU ZESPOŁOWYM
Elementy Rachunku Prawdopodobieństwa i Statystyki
Obserwatory zredukowane
Stabilność Stabilność to jedno z najważniejszych pojęć teorii sterowania W większości przypadków, stabilność jest warunkiem koniecznym praktycznego zastosowania.
A. Sumionka. Starodawna gra marynarska; Gra dwu i wieloosobowa; Gracze wykonują ruchy naprzemian; Złożona ze stosów, w których znajduje się pewna ilość
Modele obliczeń i granice obliczalności Copyright, 1999 © Jerzy R. Nawrocki Wprowadzenie.
Języki i automaty część 3.
Modelowanie i Identyfikacja 2011/2012 Metoda propagacji wstecznej Dr hab. inż. Kazimierz Duzinkiewicz, Katedra Inżynierii Systemów Sterowania 1 Warstwowe.
Teoria sterowania 2011/2012Stabilno ść Kazimierz Duzinkiewicz, dr hab. in ż. Katedra In ż ynierii Systemów Sterowania 1 Stabilność Stabilność to jedno.
Dekompozycja Kalmana systemów niesterowalnych i nieobserwowalnych
XML – eXtensible Markup Language
Podstawy analizy matematycznej I
Obserwowalność i odtwarzalność
Sterowanie – metody alokacji biegunów II
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Translatory Copyright, 2006 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład 11.
Gramatyki i translatory
Matematyka i system dwójkowy
Podstawy języka Instrukcje - wprowadzenie
Podstawy programowania
Obliczalność czyli co da się policzyć i jak Model obliczeń sieci liczące dr Kamila Barylska.
Obliczalność czyli co da się policzyć i jak Model obliczeń maszyna licznikowa dr Kamila Barylska.
Gramatyki Lindenmayera
Obliczalność czyli co da się policzyć i jak Nieobliczalność Model obliczeń :maszyna Turinga dr Kamila Barylska.
Systemy dynamiczne 2014/2015Obserwowalno ść i odtwarzalno ść  Kazimierz Duzinkiewicz, dr hab. in ż. Katedra In ż ynierii Systemów Sterowania 1 Obserwowalność.
Przerzutniki bistabilne
Algorytmy- Wprowadzenie do programowania
Języki formalne i gramatyki Copyright, 2005 © Jerzy R. Nawrocki Teoretyczne podstawy.
Języki formalne Copyright, 2006 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
ANALIZA SKŁADNIOWA.
Systemy wspomagające dowodzenie twierdzeń
Pętle – instrukcje powtórzeń
Tryby adresowania i formaty rozkazów mikroprocesora
Wstęp do programowania Wykład 9
BAZY DANYCH Microsoft Access Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Katedra Automatyki i.
1. Adres względny 2. Adres bezwzględny 3. Adres mieszany.
Gramatyki Lindenmayera Powstanie Deterministyczny L-system.
 Formuła to wyrażenie algebraiczne (wzór) określające jakie operacje ma wykonać program na danych. Może ona zawierać liczby, łańcuchy znaków, funkcje,
Media Cyfrowe  Media cyfrowe to dowolna forma (lub format) prezentacji i użytkowania treści (np. tekstowych, graficznych, audiowizualnych), które są.
Liczbami naturalnymi nazywamy liczby 0,1,2,3,..., 127,... Liczby naturalne poznaliśmy już wcześniej; służą one do liczenia przedmiotów. Zbiór liczb.
Zmienne typy danych w VBA. MS Excel – typy danych w języku programowania VBA.
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
Zapis prezentacji:

Języki i automaty część 5

niedeterministyczne automaty ze stosem Przypomnienie Poznaliśmy już dwie ważne klasy języków: JĘZYKI BEZKONTEKSTOWE JĘZYKI REGULARNE automaty skończone (AS) niedeterministyczne automaty ze stosem (NASZ)

Zastosowania gramatyk bezkontekstowych Gramatyki bezkontekstowe odgrywają dużą rolę w budowie programów nazywanych parserami (inaczej analizatory składniowe). Parser dokonuje analizy danych wejściowych i sprawdza czy dany fragment tekstu (kodu) ma poprawną strukturę (zgodną z pewną gramatyką). W przypadku języków programowania parser jest składową kompilatora.

Zastosowania gramatyk bezkontekstowych Przykład 1 (cd) W typowych językach programowania (np. C) używane są nawiasy klamrowe { i }. Aby składnia programu była poprawna nawiasy klamrowe muszą być zrównoważone. Łańcuchy zrównoważone: {}{}, {{}}, {{{}}{}} Łańcuchy niezrównoważone: }{}, {{}, }{ Zbudujemy teraz gramatykę, która generuje łańcuchy zrównoważone i NASZ akceptujący takie łańcuchy.

Przykład 1 (cd) Zdefiniujmy następującą gramatykę Gzr: symbole terminalne ={ { , } } symbole nieterminalne N={S}. reguły S  SS | {S} |  Gramatyka Gzr generuje łańcuchy zrównoważonych nawiasów klamrowych. S  {S}  {SS}  {{S}{S}}  {{S}{{S}}}  {{}{{}}} W ten sposób wygenerowaliśmy łańcuch {{{}}{}}.

Przykład 1 (cd) Zbudujemy automat ze stosem (AZS) akceptujący słowa generowane przez gramatykę Gzr (wykorzystamy metodę omówioną na wykładzie poprzednim). Automat ten składa się z 3 stanów. Oznaczmy je przez 0, 1 i 2. Stanem początkowym jest stan 0. Przy przejściu 0  1 automat wykonuje operację: ( , )  push(S) Dodajemy następujące operacje towarzyszące przejściu 1  1: ({, {)  pop; advance (}, })  pop; advance ={{,}}

( , S)  pop; push(S); push(S) Przykład 1 (cd) SSS ( , S)  pop; push(S); push(S) S{S} ( , S)  pop; push(}); push(S); push({) S ( , S)  pop Ostatecznie otrzymujemy NAZS: 1 2 ( , )  push(S) (EOF, EOS)  ( , S)  pop ({,{)  pop; advance (}, })  pop; advance ( , S)  pop; push(S); push(S) ( , S)  pop; push(}); push(S); push({);

Sprawdzimy czy automat akceptuje łańcuch {}{{}}? Przykład 1 (cd) Sprawdzimy czy automat akceptuje łańcuch {}{{}}? 1 2 ( , )  push(S) STOS {}{{}} 1 STOS {}{{}} S ( , S)  pop; push(}); push(S); push({); 1 STOS {}{{}} S ( , S)  pop; push(S); push(S)

Przykład 1 (cd) {}{{}} }{{}} }{{}} {{}} { ( , S)  pop S S } } STOS {}{{}} { S } ({,{)  pop; advance 1 STOS }{{}} S } ( , S)  pop } S 1 STOS }{{}} (}, })  pop; advance 1 STOS {{}} S ( , S)  pop; push(}); push(S); push({);

Przykład 1 (cd) {{}} {}} {}} }} STOS {{}} { S } ({,{)  pop; advance 1 STOS {}} S } ( , S)  pop; push(}); push(S); push({); 1 STOS {}} { S } ({,{)  pop; advance 1 STOS }} S } ( , S)  pop

Zatem automat akceptuje łańcuch {}{{}}. Przykład 1 (cd) 1 STOS } (}, })  pop; advance }} 1 STOS } (}, })  pop; advance Zatem automat akceptuje łańcuch {}{{}}. 1 STOS 2 (EOF, EOS) 

Przykład 2 Zdefiniujmy następującą gramatykę G: symbole terminalne ={a,A,b,B,...,<,>,/} symbole nieterminalne N={Znak, Tekst, Element, Dok, PozycjaListy, Lista} reguły Znak  a | A | b | C |...|... Tekst   | ZnakTekst Dok   | Element Dok Element  Tekst | <I>Dok</I> | <OL>Lista</OL> PozycjaListy  <LI>Dok Lista   | PozycjaListy

Przykład 2 (cd) Gramatyka G umożliwia wygenerowanie następującego łańcucha: Dok  Element Dok  <I>Dok</I>Dok  <I>Element Dok</I>Element Dok  <I>Tekst </I><OL>Lista</OL>  <I>ZnakTekst</I><OL>PozycjaListy Lista</OL>  <I>PTekst</I><OL><LI>Dok Lista</OL>  <I>PZnakTekst</I><OL><LI>Element Dok PozycjaListy Lista</OL>  <I>PrnakTekst</I><OL><LI>Element  <LI>Element  </OL>  ...  <I>Przedmioty</I><OL><LI>Fizyka<LI>Chemia</OL> Wygenerowany łańcuch jest fragmentem dokumentu HTML.

Przykład 2 (cd) W przeglądarce otrzymujemy:

Przypomnienie (cd) L={ aibici: iN} NA poprzednim wykładzie pokazaliśmy (korzystając z Lematu o pompowaniu), że następujący język L={ aibici: iN} nie jest językiem bezkontekstowym. Oznacza to, że język L nie może być rozpoznany przez automat ze stosem. Nasuwa się zatem pytanie: Czy istnieje jakaś szersza klasa automatów (maszyn), które będą w stanie rozpoznać język L?

Krótka historia naszych rozważań Na początku rozpatrywaliśmy automaty skończone. Dzięki posiadaniu skończonej ilości stanów automaty takie miały ograniczoną możliwość zapamiętywania. Były one jednak wystarczające do rozpoznawania języków regularnych. Aby móc rozpoznawać języki bezkontekstowe musieliśmy wyposażyć automaty w pewien rodzaj pamięci. Otrzymaliśmy w ten sposób automaty ze stosem. Ponieważ nie ograniczyliśmy wielkości stosu automat ze stosem może „zapamiętać” nieskończoną ilość informacji.

Uogólnienie Poważnym ograniczeniem automatu ze stosem jest to, że może on pobierać informacje ze swego stosu tylko w kolejności „ostatni zapamiętany, pierwszy pobrany” (ang. LIFO – last in, first out). Innymi słowy automatu skończonego nie ma pamięci o dostępie swobodnym (ang. RAM – random access memory). Pamięć taką posiada każdy uniwersalny komputer. Spróbujmy zatem rozważyć automaty z pamięcią typu RAM. W dalszej części wykładu zajmiemy się MASZYNAMI TURINGA.

Maszyny Turinga Pamięć automatu przedstawmy jako nieskończoną (z obydwu stron) taśmę podzieloną na komórki. Każda komórka może zawierać literę (symbol) z pewnego alfabetu . b c a Nad taśmą umieszczona jest głowica, która może poruszać się w prawo lub w lewo. Głowica może czytać/wpisać symbol z/do komórki. b c a sterowanie

Maszyny Turinga Zakładamy, że wejściowy ciąg znaków (słowo) zapisany jest na taśmie (od strony lewej do prawej). Pozostałe komórki są puste. Na początku głowica maszyny ustawiona jest nad komórką zawierającą pierwszą literę słowa. k e r a m Podobnie jak w przypadku AS i AZS działanie maszyny Turinga polega na przechodzeniu z jednego stanu do drugiego. Istnieje przy tym wyróżniony stan początkowy. Ponieważ na taśmie istnieją puste komórki wprowadzamy symbol  oznaczający taką komórkę.

Maszyny Turinga Możemy zatem mówić o dwóch alfabetach:  - alfabet z którego zbudowane jest słowo i T – alfabet taśmy różniący się od  przynajmniej znakiem  (alfabet T ten może zawierać także inne znaki nie należące do ). Podobnie jak dla AS i AZS także w przypadku maszyny Turinga musimy określić funkcję przejścia . Dla danego stanu i symbolu nad którym ustawiona jest aktualnie głowica maszyna Turinga wykonuje następujące czynności: zapisuje literę na taśmie (w aktualnej komórce) przesuwa głowice o jedną komórkę w lewo lub prawo przechodzi do nowego stanu

Maszyny Turinga : Q  T (Q  T  {L, R, N})  stop Funkcja przejścia  parze złożonej ze stanu i symbolu z taśmy (z aktualnego położenia głowicy) przyporządkowuje: nowy stan symbol który będzie zapisana na taśmie jeden z symboli L, R i N oznaczających przesunięcie głowicy w lewo, w prawo i brak przesunięcia. Zatem: : Q  T (Q  T  {L, R, N})  stop stop oznacza, że maszyna zakończyła działanie. Możemy teraz wprowadzić formalną definicję maszyny Turinga.

Maszyny Turinga : Q  T (Q  T  {L, R, N})  stop Definicja 5.1 Maszyna Turinga (MT) nad alfabetem T składa się z: skończonego zbioru stanów Q stanu początkowego q0 zbioru stanów akceptujących FQ funkcji przejścia : Q  T (Q  T  {L, R, N})  stop

Maszyny Turinga Uwagi: w przeciwieństwie do AS i AZS maszyna Turinga może zmienić wejściowe słowo zapisane na taśmie. w przeciwieństwie do AS i AZS maszyna Turinga może przechodzić przez wejściowe słowo kilka razy (dzięki przesunięciom głowicy). podobnie jak AZS maszyna Turinga nie musi się zatrzymać tzn. dla pewnych słów może działać nieskończenie długo.

Maszyny Turinga W przypadku maszyn Turinga (podobnie jak w przypadku AS i AZS) interesuje nas co to znaczy, że maszyna Turinga akceptuje słowo. Wprowadźmy więc odpowiednią definicję: Definicja 5.1 Mówimy, że słowo  jest akceptowane przez maszynę Turinga jeżeli startując ze stanu początkowego, z głowicą ustawioną na pierwszej literze słowa maszyna Turinga zatrzyma się w stanie akceptującym. Mówimy, że język L jest akceptowany przez maszynę Turinga jeżeli składa się z słów akceptowanych przez maszynę Turinga.

Maszyny Turinga Maszyna Turinga rozpoczyna działanie od stanu początkowego z głowicą ustawioną nad pierwszą literą słowa wejściowego. Następnie maszyna przechodzi przez kolejne konfiguracje. Przez konfigurację rozumiemy: aktualną literę na taśmie aktualną pozycję głowicy aktualny stan w którym znajduje się maszyna

Maszyny Turinga Wprowadźmy następujące oznaczenie aktualnej konfiguracji MT: x0x1xiqxi+1xn q jest aktualnym stanem maszyny xi są symbolami na taśmie głowica maszyny znajduje się nad komórką zawierającą xi+1 na lewo od głowicy znajdują się komórki zawierające x0x1xi i wszystkie komórki na lewo od x0 są puste na prawo od głowicy znajdują się komórki zawierające xi+2xi+3xn i wszystkie komórki na prawo od xn są puste xn … xi+1 xi+2 xi x1 x0

 Przykład (maszyna M1) ={a, b} T={a, b, } Q={0,1} F={0} Funkcja przejścia:  a b  0 (0,a,R) (1,b,R) stop 1 Jak działa tak zdefiniowana MT? 0aab  a0ab  aa0b  aab1 MT nie akceptuje słowa aab bo 1 nie jest stanem akceptującym. 0aaa  a0aa  aa0a  aaa0 MT rozponaje język {an: nN}.

 Przykład (maszyna M2) Zdefiniujmy inaczej funkcję przejścia: a b  0 (0,,R) (1,,R) stop 1 Jak działa tak zdefiniowana MT? 0aab  0ab  0b  1 M2 nie akceptuje słowa aab bo 1 nie jest stanem akceptującym. 0aaa  0aa  0a  0 M2 podobnie jak M1 akceptuje słowa języka {an: nN}. Dodatkowo jednak niszczy słowo zapisane na taśmie!

Rozpatrzmy teraz następującą funkcję przejścia (stan akceptujący 0):  Przykład (maszyna M3) Rozpatrzmy teraz następującą funkcję przejścia (stan akceptujący 0):  a b  0 (1,,R) (2,,R) stop 1 (1,a,R) (1,b,R) (3,,L) 2 (2,a,R) (2,b,R) (4,,L) 3 (5,,L) (0,,N) 4 5 (5,a,L) (5,b,L) (0,,R) 0ababa  1baba  b1aba  ba1ba  bab1a  baba1  bab3a  ba5b  b5ab  5bab  5bab  0bab  2ab  a2b  ab2  a4b  5a  5a  0a  1  3 

 Przykład (Maszyna M4) ={a} T={a, } Q={0,1} F={0} Funkcja przejścia:  a  0 (1,a,R) stop 1 (0,a,R) Jak działa tak zdefiniowana MT? 0aaa  a1aa  aa0a  aaa1 MT nie akceptuje słowa aaa bo 1 nie jest stanem akceptującym. 0aaaa  a1aaa  aa0aa  aaa1a  aaaa0 MT akceptuje słowa języka {a2n: nN}.

Przykład (maszyna M5) Rozpatrzmy teraz MT z nieco inną funkcją przejścia:  a  0 (1,a,R) stop 1 (0,a,R) (1,,R) Jak działa tak zdefiniowana MT? 0aaaa  a1aaa  aa0aa  aaa1a  aaaa0 Podobnie jak poprzednia MT maszyna ta akceptuje słowa języka L={a2n: nN}. Rozpatrzmy jednak słowo nie należące do tego zbioru: 0aaa  a1aa  aa0a  aaa1  aaa1 aaa1 …  Dla słów złożonych z nieparzystej liczby liter a maszyna nie zatrzyma się!!!

Problem stopu MT M5 mimo, że rozpoznaje słowa języka L to dla słów nie należących do tego języka nigdy nie zatrzyma się. Załóżmy, że obserwujemy MT i interesuje nas tylko (nie znamy funkcji przejścia) czy maszyna zatrzyma się i w jakim będzie wówczas stanie. Jeżeli obserwujemy maszynę M5 to z faktu, że maszyna jeszcze nie zatrzymała się nie możemy wyciągnąć jednoznacznego wniosku: albo słowo jest bardzo długie albo maszyna „zapętliła się” Aby rozróżnić te dwie sytuacje wprowadzamy następującą definicję:

Definicja 5.1 Mówimy, że język L jest rekurencyjnie przeliczalny jeżeli istnieje MT, która go akceptuje. Mówimy, że język L jest rekurencyjny jeżeli istnieje MT, która go akceptuje i która zawsze zatrzymuje się. Na czym polega różnica? Jeżeli chcemy pokazać, że język jest rekurencyjny musimy znaleźć MT, która rozpoznaje go i zatrzymuje się dla dowolnych słów. Jeżeli chcemy pokazać, że język jest rekurencyjnie przeliczalny musimy znaleźć MT, która rozpoznaje go i zatrzymuje się dla słów, które rozpoznaje.

Każdy język bezkontekstowy jest językiem rekurencyjnym. Z punktu widzenia naszych wcześniejszych rozważań ważne jest następujące twierdzenie. Twierdzenie 5.1 Każdy język bezkontekstowy jest językiem rekurencyjnym. Podsumowanie Wszystkie języki nad alfabetem  Języki regularne Języki rekurencyjnie przeliczalne Języki rekurencyjne Języki bezkontekstowe