Język nieskończony a język skończony

16

Nie jestem pewien, czy w teorii komputerowej używa się zwrotów „nieskończony” język lub „skończony” język.

Myślę, że źródłem problemu jest to, że język taki jak jest nieskończony w tym sensie, że może wygenerować nieskończoną (ale policzalną) liczbę łańcuchów. Jednak nadal może być rozpoznany przez automat skończony .L.={zab}

Nie pomaga też fakt, że książka Sipser tak naprawdę nie czyni tego rozróżnienia (przynajmniej o ile wiem). Pytanie o nieskończone / skończone języki i ich związek z językami zwykłymi pojawiło się na przykładowym egzaminie.

szalenie
źródło
1
Jest nieskończony, ponieważ ab*(gwiazda Kleene) oznacza, że ​​możesz mieć zero lub więcej kombinacji łańcucha ab, w tym potencjalną nieskończoną liczbę łańcuchów: {"", ab ^ 1, ab ^ 2, ab ^ 3, ... ., ab ^ n}. Możesz jednak nadal zbudować FSM, który rozpoznaje ten język, ponieważ w rzeczywistości nie ma możliwości wygenerowania nieskończonego ciągu, gdy przetwarzane przez maszynę wszystkie ciągi muszą być skończone, ale to nie czyni samego języka skończonym. Języki nieskończoności są teoretyczne.
Hunter McMillen,
1
„Skończony opis” i „skończony” to nie to samo. Na przykład wyrażenie regularne jest skończonym opisem nieskończonego języka; automat skończony to po prostu kolejny (ale nazywa się automatem skończonym nie dlatego, że jest to skończony opis, ale ponieważ może przechowywać tylko stałą liczbę bitów). {za,b}
Raphael
Dlaczego skończona liczba stanów ma być ważniejsza niż skończony opis jakiejkolwiek innej maszyny?
babou
Automat może mieć pętle i możesz używać niektórych stanów w nieskończoność.
doganulus

Odpowiedzi:

28

O mój. Wydaje się, że jest to zamieszanie spowodowane (starą szkołą) terminologią „języka skończonego” jako synonimu tego, co jest dziś znane jako „język regularny”.

W każdym razie standardowe definicje skończone / nieskończone przyjęte obecnie dotyczą tylko rozmiaru języka:

  1. skończony język jest dowolny zestaw ciągów, o skończonej liczności, | L | < .L.|L.|<
  2. nieskończony język jest dowolny zestaw ciągów nieskończonych ( 0 ) liczności | L | = .L.0|L.|=

Skończony jest zawsze regularny.L.

Nieskończony może być regularny (czasem nazywany „stanem skończonym”), rozstrzygalny (czasem nazywany „rekurencyjnym”), nieregularny (stan nieskończony), nierozstrzygalny itp.,L.

Ran G.
źródło
1
Dzięki Ran! Żeby było jasne, to nieskończony język? Sądzę więc, że biorąc pod uwagę nieskończony język, nic nie wiadomo na temat tego, jaka to klasa języka. L.={zab}
drzewny
1
to jest poprawne. jest nieskończonym, regularnym językiem. L.={za,b}
Ran G.
1
@ Timberly Pewnie, możemy wiedzieć i udowodnić, jaki to jest język.
phant0m
4

Język to zestaw ciągów znaków. Jest skończony, jeśli ma skończoną liczbę łańcuchów.

David Richerby
źródło
4

Nie jestem pewien, czy w teorii komputerowej używa się zwrotów „nieskończony” język lub „skończony” język.

Myślę, że źródłem problemu jest to, że język taki jak jest nieskończony w tym sensie, że może wygenerować nieskończoną (ale policzalną) liczbę łańcuchów. Jednak nadal może być rozpoznany przez automat skończony.L.={zab}

Inną kwestią jest to, że formalna teoria języka jest dość osobliwa w tym, jak używa terminu „język”.

Dla każdego na tym świecie, z wyjątkiem osób posiadających formalną teorię języka, język jest systemem wypowiedzi używanych do komunikacji, więc każda wypowiedź ma formę (swoją składnię ) i jakieś znaczenie ( semantykę ). Formalna teoria języka, przynajmniej część wykorzystywana w informatyce, poświęcona jest problemowi, jak najlepiej formalnie zdefiniować składnię języków. Chodzi przede wszystkim o związek między składnią języków (jak wyglądają wypowiedzi) a formalizmami (językami!), Takimi jak wyrażenia regularne używane do definiowania składni języków.

Dlatego w formalnej teorii języka „język” definiuje się po prostu jako „zbiór ciągów znaków”. Zazwyczaj nie przypisuje znaczenia ciągom w języku.

Jednocześnie formalizacje używane do opisu języków, takie jak wyrażenia regularne, również tworzą języki w tym sensie: na przykład każde wyrażenie regularne jest ciągiem znaków, a zatem zbiór wyrażeń regularnych jest językiem. Jednak dla tych formalizmów, komunikaty w języku zrób mają znaczenie: na przykład, znaczenie każdego wyrażenia regularnego jest językiem to oznacza.

zab{zab}zabzab{zab}

{ab}. The operator denotes a function that maps languages to languages: it maps each language L to the language consisting of all strings that consist of a string in L zero or more times repeated. If L is the empty language, the result is L; in all other cases, the result is an infinite language. For instance, {ab} is the language {ϵ,ab,abab,ababab,abababab,}. It is infinite, but using the operator , we can describe it in a finite way, as {ab}.

Furthermore, we can use a regular expression to describe this language, namely (ab). Like all regular expressions, this is a finite string, but like most regular expressions that contain the operator, it describes an infinite language.

Whenever a text on formal languages uses an expression such as (ab) that denotes a language, ask yourself whether it is discussing the regular expression itself (e.g. how it is constructed, which language it denotes, etc.) or whether it merely uses the regular expression to refer to the language being denoted.

reinierpost
źródło