Перечислимые языки
Версия от 23:48, 1 декабря 2010; Spolan (обсуждение | вклад)
Определение: |
Перечисляющая программа для языка | - программа, по очереди выводящая все слова языка . Если слово принадлежит языку, то программа за конечное время выдаст его на выходе. Слова, не принадлежащие языку, программа выводить не будет.
Определение: |
Полуразрешающая программа для языка | - программа, которая при подаче на вход слова из языка за конечное время завершится и вернет , а при подаче на вход слова не из языка может за конечное время вернуть , а может и зависнуть.
Определение: |
Перечислимый язык - язык, для которого существует перечисляющая программа. |
Определение: |
Перечислимый язык - язык, для которого существует полуразрешающая программа. |
Определение: |
Пусть имеется некоторая программа | , которая может либо завершиться за конечное время и что-то вернуть, либо зависнуть. Тогда запуск программы с тайм-лимитом будем обозначать как и иметь в виду следующее: если за операций программа корректно завершилась и что-то вернула, то вернет то же самое; если же за операций программа не успела завершиться, то вернет (специально зарезервированное значение).
Теорема: |
Два определения перечислимого языка эквивалентны. |
Доказательство: |
Пусть имеется перечисляющая программа для языка , построим полуразрешающую. Сделаем это следующим образом. Получаем на вход некоторое слово , запускаем перечисляющую программу. Если в процессе вывода слов встретится , то завершаем работу, вернув . Таким образом при подаче на вход слова из языка построенная программа вернет и завершится. Если же мы подадим на вход слово не из языка, то построенная программа будет работать бесконечно долго, что вполне устраивает. Таким образом полуразрешающая программа построена.Теперь пусть имеется полуразрешающая программа для языка , построим перечисляющую.
Если слово принадлежит языку, то условие будет выполнено для какого-то , а значит на выходе построенной программы рано или поздно появится . Если же слово не принадлежит языку, то ну будет выполнено ни для какого , а значит оно никогда не появится на выходе.Таким образом мы построили перечисляющую программу. В итоге теорема доказана. |
Теорема: |
Любой разрешимый язык является перечислимым. |
Доказательство: |
Язык резрешимый, значит существует программа , которая за конечное время определит, принадлежит ли поданное на вход слово языку . Таким образом перечисляющая программа будет иметь следующий вид.
|
Теорема: |
Существуют перечислимые, но не разрешимые языки. |