Jeśli nie, to co to znaczy, że dla jakiegoś stanu i jakiegoś symbolu , nie istnieje?
terminology
automata
finite-automata
Duncan
źródło
źródło
Odpowiedzi:
Wygląda na to, że natknąłeś się na sporną kwestię. Najwyraźniej informatycy lubią się kłócić. Z pewnością lubię się kłócić, więc proszę!
Moja odpowiedź jest jednoznaczna: nie. Deterministyczne skończone automaty nie potrzebują przejścia z każdego stanu dla każdego symbolu. Kiedyδ(q,a) nie istnieje, oznacza to po prostu, że DFA nie akceptuje ciągu wejściowego.
Chociaż możesz utworzyć definicję DFA, która wymaga istnieniaδ(q,a) , po prostu nie jest tak, że brakujące przejście powoduje, że wynikowa struktura (jakkolwiek to nazwiesz) nie jest deterministyczna, ponieważ wielu komentujących jest roszczenie Jeśli uczęszczasz na teorię automatów, następnym tematem będą języki bezkontekstowe i automaty push-down, w których rozróżnienie między automatami niedeterministycznymi i deterministycznymi jest krytyczne, i musisz użyć poprawnej definicji niedeterminizmu.
Niedeterminizm wiąże się z więcej niż jednym przejściem prawnym.
Myślę, że wszyscy zgadzamy się z następującą definicją Wikipedii (która pokażę za chwilę jest nieco niejednoznaczna):
Deterministyczny automat skończonyM jest 5-krotną ( Q , Σ , δ , q0 , F ), składającą się z
Niechw=a1a2⋯an jest łańcuchem na alfabet Σ . Automat M przyjmuje ciąg w jeśli sekwencja stanów, r0,r1,…,rn , istnieje w Q z następującymi warunkami:
Dwuznaczność i kontrowersje dotyczą definicji funkcji przejściaδ (liczba „3” na pierwszej wypunktowanej liście). Wszyscy zgadzamy się, że to, co odróżnia DFA od NFA, to to, że δ jest funkcją, a nie relacją . Ale czy δ jest funkcją częściową czy całkowitą ?
Definicja DFA działa dobrze, jeśliδ jest funkcją częściową. Biorąc pod uwagę ciąg wejściowy, jeśli osiągniesz stan qi za pomocą symbolu wejściowego aj którym nie ma następnego stanu, automaty po prostu nie akceptują.
Ponadto, gdy rozszerzysz tę definicję, aby utworzyć definicję automatów push-down, będziesz musiał rozróżnić, że automaty push-down z funkcjami przejściowymi, które są funkcjami częściowymi, są klasyfikowane jako deterministyczne, a nie niedeterministyczne.
Edycja, styczeń 2019 r
Komentator @Alex Smart słusznie krytykuje mnie za to, że nie podawałem referencji ani nie wyjaśniałem, dlaczego powinniśmy się tym przejmować. Więc oto idzie:
Powodem, dla którego dbamy o dokładną definicję determinizmu kontra niedeterminizm, jest to, że niektóre klasy automatów niedeterministycznych są silniejsze niż ich deterministyczni kuzyni, a niektóre klasy automatów niedeterministycznych nie są silniejsze niż ich deterministyczni kuzyni. W przypadku automatów skończonych i maszyn Turinga warianty deterministyczne i niedeterministyczne mają równoważną moc. W przypadku automatów wypychających istnieją języki, w których rozróżnienie jest ważne: istnieją NPDA, które akceptują język, i żadna DPDA nie akceptuje języka. W przypadku automatów z ograniczeniami liniowymi pytanie jest (lub było ostatnio sprawdzane) otwarte. Wzrost mocy NPDA w porównaniu z DPDA wynika z dopuszczenia wielu przejścia, a nie z zamiany funkcji przejścia z funkcji całkowitej na funkcję częściową.
Książki ze społeczności kompilatorów:
Aho i Ullman, Principles of Compiler Design , 1977: Najpierw definiuje NFA (strona 88) z relacją przejścia, a następnie (s. 90-91):
Aho, Sethi i Ullman, Kompilatory, zasady, techniki i narzędzia , przedruk 1988, są podobne, najpierw definiują NFA z relacją przejścia, a następnie (s. 115-116):
(Zauważ, że w komentarzach @Alex Smart mówi: „smok specjalnie wspomina, że funkcja jest całkowita.” Zakładam, że mówi o późniejszym wydaniu ze współautorem Lamem, do którego obecnie nie mam dostępu. )
Appel, Modern Compiler Implementation in Java , 1988 (s. 22):
Następnie Appel wyjaśnia, że używając DFA do rozpoznawania najdłuższych dopasowań, jawnie wykorzystujemy brakujące przejścia, aby zdecydować, kiedy przerwać (s. 23):
Książki ze społeczności teorii przełączania:
Kohavi, Switching and Finite Automata Theory, 2 / e , 1978, s. 1. 611 mówi:
Ja zazwyczaj interpretować jednoznacznie oznacza „dokładnie jeden”, a nie „nie więcej niż jeden”. (Tzn. Kohavi wydaje się mówić, że determinizm wymaga całkowitej funkcji)
Książki ze społeczności teorii teorii obliczeń:
Tutaj wydaje się, że bardziej powszechne jest definiowanie DFA przed NFA i wymaganie, aby DFA miały całkowitą funkcję przejścia, ale następnie definiowanie NPDA przed DPDA i definiowanie „determinizmu” jako ograniczenia relacji przejścia do braku nie więcej niż -jeden wpis dla każdej pary stan / symbol.
Dotyczy to Hopcroft i Ullman, 1979, Lewis i Papadimitriou, 1981, a zwłaszcza Sipser, 2006, którzy używają definicji DFA pedagogicznie, aby wprowadzić dokładne definicje formalne oraz wyjaśnić ich znaczenie i wyraźnie powiedzieć (str. 36):
Co ciekawe, Rabin i Scott również definiują niedeterministyczne automaty skończone w kategoriach funkcji całkowitej! Strona 120, definicja 9:
To znaczy: całkowita funkcja przejścia nie czyni deterministycznego systemu!
Sipser 2006 śledzi Rabina i Scotta i wykorzystuje całkowitą funkcję przejścia ze stanów / symboli do zestawu mocy stanów w swoich definicjach niedeterministycznych automatów skończonych, niedeterministycznych PDA i niedeterministycznych maszyn Turinga, ale pomija temat deterministyczny PDA.
Zarówno Hopcroft, jak i Ullman, 1979, oraz Lewis i Papadimitriou, 1981, używają funkcji cząstkowych w swoich definicjach deterministycznych PDA. Najpierw definiują NPDA za pomocą relacji przejściowych, a następnie, kiedy dochodzą do PDA, Lewis i Papadimitriou mówią (s. 135),
Podczas gdy Hopcroft i Ullman mówią (s. 112):
źródło
Pod względem obliczalności NFA są równoważne DFA - istnieje algorytm do konwersji z NFA na DFA, a DFA jest po prostu trywialnie NFA, który nie używa niedeterminizmu, więc oba definiują zestaw zwykłych języków.
źródło
Istnieją definicje DFA na wzór
W takim przypadku nie potrzebujesz wszystkich przejść. Jeśli automat nie ma przejścia pasującego do następnego symbolu wejściowego, odrzuca.
Miło jest wykazać, że obie definicje są równoważne pod względem tego, które języki mogą być akceptowane.
źródło
W definicji DFA każdy stan powinien mieć cały alfabet w £. Na przykład, jeśli £ = {a, b, c} i Q = {q0, q1, q2}, wszystkie te stany powinny mieć wszystkie symbole a, b, c, które przechodzą do innego stanu lub tego samego stanu.
źródło
Najprostszą odpowiedzią jest dodanie martwego stanu dla lewego symbolu . Podobnie jak w przypadku konwersji z NFA do DFA, otrzymujemy przejście Φ dla niektórych symboli, co oznacza, że tworzymy dla niego stan martwy.
źródło