Изменения

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

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

69 байт убрано, 01:37, 12 апреля 2018
Нет описания правки
: Пусть <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>
<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
'''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>.
}}
|proof=
Приведём программу, перечисляющую язык натуральных чисел:
<code>
'''function''' p(i: '''int'''): '''int'''
'''return''' i
</code>.
}}
|proof=
Приведём программу, перечисляющую язык чётных неотрицательных чисел:
<code>
'''function''' p(i: '''int'''): '''int'''
'''return''' i * 2
</code> .}} 
== Примеры коперечислимых языков ==
Построим простой полуразрешитель:
<code>
'''function''' p(n: '''int'''): '''int'''
'''for''' i = 2 '''to''' <tex>\lceil \sqrt{n} \rceil</tex>
'''return''' 0
'''return''' 1
</code>.}}
Анонимный участник

Навигация