Замкнутость разрешимых и перечислимых языков относительно теоретико-множественных и алгебраических операций — различия между версиями
Vincent (обсуждение | вклад) |
Vincent (обсуждение | вклад) |
||
Строка 3: | Строка 3: | ||
Языки <tex> L_1 </tex> и <tex> L_2 </tex> {{---}} [[Разрешимые_(рекурсивные)_языки|разрешимы]], тогда следующие языки разрешимы: | Языки <tex> L_1 </tex> и <tex> L_2 </tex> {{---}} [[Разрешимые_(рекурсивные)_языки|разрешимы]], тогда следующие языки разрешимы: | ||
− | * | + | * <tex>L_1 \cup L_2</tex> {{---}} объединение <tex>L_1</tex> и <tex>L_2</tex>; |
− | + | * <tex>L_1 \cap L_2</tex> {{---}} пересечение <tex>L_1</tex> и <tex>L_2\</tex>; | |
− | * | + | * <tex>\overline{L_1}</tex> {{---}} дополнение <tex>L_1\</tex>; |
− | * | + | * <tex>L_1 \backslash L_2</tex> {{---}} разность <tex>L_1</tex> и <tex>L_2</tex>; |
− | + | * <tex>L_1 \times L_2</tex> {{---}} декартово произведение <tex>L_1</tex> и <tex>L_2</tex>; | |
− | * | + | * <tex>L_1^*</tex> {{---}} замыкание Клини <tex>L_1</tex>; |
− | * | + | * <tex>L_1 L_2</tex> {{---}} конкатенация <tex>L_1</tex> и <tex>L_2</tex>. |
|proof= | |proof= | ||
Строка 15: | Строка 15: | ||
<tex>L_1</tex> и <tex>L_2</tex> соответственно. Для доказательства достаточно написать разрешающую программу (разрешитель) для каждого случая. | <tex>L_1</tex> и <tex>L_2</tex> соответственно. Для доказательства достаточно написать разрешающую программу (разрешитель) для каждого случая. | ||
− | * Разрешающая программа для языка <tex> L_1 \cup L_2 | + | * Разрешающая программа для языка <tex> L_1 \cup L_2</tex>: |
− | <tex>p(x)</tex> | + | <tex>p(x):</tex> |
'''return''' <tex>(p_1(x) == 1) \lor (p_2(x) == 1)</tex> | '''return''' <tex>(p_1(x) == 1) \lor (p_2(x) == 1)</tex> | ||
− | * Для языка <tex> L_1 \cap L_2 | + | * Для языка <tex> L_1 \cap L_2 </tex>: |
− | <tex>p(x)</tex> | + | <tex>p(x):</tex> |
'''return''' <tex>(p_1(x) == 1) \land (p_2(x) == 1)</tex> | '''return''' <tex>(p_1(x) == 1) \land (p_2(x) == 1)</tex> | ||
− | * Для языка <tex> \overline{L_1} | + | * Для языка <tex> \overline{L_1}</tex>: |
− | <tex>p(x)</tex> | + | <tex>p(x):</tex> |
'''return''' <tex>(p_1(x) == 0)</tex> | '''return''' <tex>(p_1(x) == 0)</tex> | ||
− | * Для языка <tex> L_1 \backslash L_2 | + | * Для языка <tex> L_1 \backslash L_2</tex>: |
− | <tex>p(x)</tex> | + | <tex>p(x):</tex> |
'''return''' <tex>(p_1(x) == 1) \land (p_2(x) == 0)</tex> | '''return''' <tex>(p_1(x) == 1) \land (p_2(x) == 0)</tex> | ||
− | * Для языка <tex> L_1 \times L_2 | + | * Для языка <tex> L_1 \times L_2</tex>: |
− | <tex>p(\langle x, y \rangle)</tex> | + | <tex>p(\langle x, y \rangle):</tex> |
'''return''' <tex>(p_1(x) == 1) \land (p_2(y) == 1)</tex> | '''return''' <tex>(p_1(x) == 1) \land (p_2(y) == 1)</tex> | ||
− | * Для языка <tex>L_1^* | + | * Для языка <tex>L_1^*</tex>: |
− | <tex>p(x)</tex> | + | <tex>p(x):</tex> |
'''forall''' <tex>{\{x_i\}}_{i=1}^n \in P </tex>, где <tex>P</tex> {{---}} множество всех возможных разбиений слова <tex>x</tex> на подстроки | '''forall''' <tex>{\{x_i\}}_{i=1}^n \in P </tex>, где <tex>P</tex> {{---}} множество всех возможных разбиений слова <tex>x</tex> на подстроки | ||
'''if''' <tex>(p_1(x_1) == 1) \land (p_1(x_2) == 1) \land \ ... \ \land (p_1(x_n) == 1)</tex> | '''if''' <tex>(p_1(x_1) == 1) \land (p_1(x_2) == 1) \land \ ... \ \land (p_1(x_n) == 1)</tex> |
Версия 09:14, 23 декабря 2011
Теорема: |
Языки разрешимы, тогда следующие языки разрешимы:
и —
|
Доказательство: |
Пусть и — разрешающие программы для языков и соответственно. Для доказательства достаточно написать разрешающую программу (разрешитель) для каждого случая.
return
return
return
return
return
forall , где — множество всех возможных разбиений слова на подстроки if return 1 return 0 Разрешитель будет перебирать все возможные разбиения данного ему слова на подстроки и для каждой проверять принадлежность . Если хотя бы в одном разбиении все подстроки будут принадлежать , то все слово принадлежит , иначе — не принадлежит.
Разрешитель будет перебирать все возможные разбиения на два слова и проверять принадлежность первого слова forall , где — множество всех возможных разбиений слова на две подстроки if return 1 return 0 и второго слова . Если хотя бы для одного разбиения оба разрешителя вернут 1, то слово принадлежит , иначе — не принадлежит. |
Теорема: |
Языки — перечислимы, тогда следующие языки перечислимы:
|
Доказательство: |
Пусть и — полуразрешающие программы для языков и соответственно. Для доказательства достаточно написать полуразрешающую программу для каждого случая. Заметим, что и могут зависнуть при использовании в полуразрешающей программе для соответствующего языка, но это допустимо.
for if return 1
if return 1
if return 1
for forall , где — множество всех возможных разбиений слова на подстроки if return 1
for forall , где — множество всех возможных разбиений слова на две подстроки if return 1 |
Теорема: |
Языки — перечислимы, тогда следующие языки могут быть не перечислимы:
|
Доказательство: |
Рассмотрим язык существуют перечислимые, но не разрешимые языки, следовательно, язык может быть не перечислим. Теперь рассмотрим . Предположим, что он перечислим. Тогда, имея какое-либо слово, мы можем одновременно запустить перечислители для и . В какой-то момент времени слово появится либо в выводе перечислителя для , либо в выводе перечислителя для . Тогда получится что разрешим, так как про любое слово мы можем узнать принадлежит оно или не принадлежит. Но мы знаем, что . В качестве возьмем язык, состоящий из всех слов. Тогда получится, что язык это . Про язык мы знаем, что он перечислим не всегда, следовательно и язык также не всегда перечислим. |
Литература
- Верещагин Н. К., Шень А. Лекции по математической логике и теории алгоритов. Часть 3. Вычислимые функции — М.: МЦНМО, 1999