Изменения

Перейти к: навигация, поиск

Перечислимые языки

380 байт добавлено, 23:03, 10 марта 2019
Основные определения
<tex>L</tex> {{---}} перечислимый <tex>\Leftrightarrow L</tex> {{---}} полуразрешимый.
|proof=
<tex> \Longrightarrow </tex>:
: Пусть <tex>L</tex> {{---}} перечислимый язык. Тогда для него существует программа <tex>g</tex>, которая по номеру <tex>i</tex> выводит слово из <tex>L</tex>. Значит, для всех <tex>x</tex> из <tex>L</tex> путем перебора значений функции <tex>g</tex> мы можем найти такое <tex>i</tex>, что <tex> g(i) = x</tex>. Следовательно, существует программа <tex>p</tex>, такая, что <tex>\forall x: x \in L \Leftrightarrow p(x)=1</tex>. Тогда <tex>L</tex> является полуразрешимым языком.
<code>
'''function''' p(x: '''int'''): '''int'''
'''for''' i = 1 '''to ''' <tex>\infty</tex>
'''if''' g(i) == x
'''return''' 1
<tex> \Longleftarrow </tex>:</code>
:Пусть <tex>L</tex> {{---}} полуразрешимый язык. Тогда для него существует программа <tex>p</tex>, результат которой равен <tex>1</tex> для любого слова из <tex>L</tex>. Чтобы программа <tex>p</tex> не зависала на словах, которые не принадлежат <tex>L</tex>, будем запускать ее с тайм-лимитом. Для поиска <tex>i</tex>-го слова из языка <tex>L</tex> будем перебирать <tex>k</tex> {{---}} тайм-лимит с которым будем запускать программу <tex>p</tex>. Таким образом существует программа <tex>g_0</tex>, которая выводит <tex>i</tex> слово языка <tex>L</tex> с повторениями. Для того, чтобы выводить слова без повторений, заведем множество <tex>U</tex>, в котором будем хранить уже выведенные слова. Программа <tex>g</tex> доказывает, что <tex>L</tex> является перечислимым языком.
: <code>
'''function''' <tex>g_0</tex>(i: '''int'''): '''int'''
cnt = 0
'''for''' k = 1 '''to ''' <tex> \infty</tex>
'''for''' x <tex>\in \{x_1, x_2, .., x_k\}</tex>
'''if''' <tex> p|_k</tex>(x) == 1
'''if''' cnt == i
'''return''' x
</code><code>
'''function''' <tex>g</tex>(i: '''int'''): '''int'''
<tex>U = \emptyset</tex>
'''for''' j = 1 '''to ''' <tex>\infty</tex>
x = <tex> g_0</tex>(j)
'''if''' x <tex>\notin</tex> <tex> U</tex>
cnt++
'''if''' cnt == i
'''return''' x
U.insert(x)
</code>'''''}}
{{Теорема
Рассмотрим полуразрешители для <tex>L</tex> и <tex>\overline L</tex> и одновременно запустим их для одного и того же элемента <tex>x</tex>. <tex>x</tex> принадлежит либо <tex> L </tex>, либо <tex>\overline{L}</tex>, поэтому один из полуразрешителей успешно отработает и не зависнет. Значит, мы за конечное время узнаем, лежит ли <tex>x</tex> в <tex>L</tex> или нет. Таким образом, мы построили разрешитель для <tex>L</tex>, то есть <tex>L</tex> {{---}} разрешимый.
}}
 
== Примеры перечислимых языков ==
|proof=
Приведём программу, перечисляющую язык натуральных чисел:
<code> '''function''' p(i: '''int'''): '''int'''
'''return''' i
</code> '''''}}
{{Утверждение
|proof=
Приведём программу, перечисляющую язык чётных неотрицательных чисел:
<code>
'''function''' p(i: '''int'''): '''int'''
'''return''' i * 2
</code> '''''}}
== Примеры коперечислимых языков ==
Язык нечётных неотрицательных чисел коперечислим.
|proof=
<tex>\overline L</tex> {{- --}} язык чётных неотрицательных чисел. Так как язык чётных неотрицательных чисел перечислим, то и язык нечётных неотрицательных чисел тоже перечислим.
}}
Язык простых чисел коперечислим.
|proof=
Пусть <tex>L</tex> {{- --}} язык простых чисел, тогда <tex>\overline L</tex> {{--- }} язык, состоящий из составных чисел и единицы. Покажем, что <tex>\overline L</tex> полуразрешим, а, следовательно, и перечислим согласно теореме, приведённой выше.
Построим простой полуразрешитель:
<code>
'''function''' p(n: '''int'''): '''int'''
'''for''' i = 2 '''to ''' <tex>\lceil \sqrt{n}\rceil</tex>
'''if''' n mod i == 0
'''return''' 0
'''return''' 1
</code>'''''}} 
== Примеры неперечислимых языков ==
Функция [[Busy_beaver | busy beaver]] <tex>bb(n)</tex> {{---}} невычислима, следовательно такой язык неперечислим.
}}
 
== См. также ==
 
* [[Разрешимые (рекурсивные) языки]]
* [[Замкнутость разрешимых и перечислимых языков относительно теоретико-множественных и алгебраических операций]]
== Источники информации ==
[[Категория: Теория формальных языков]]
[[Категория: Теория вычислимости]]
[[Категория: Разрешимые и перечислимые языки]]
36
правок

Навигация