Замкнутость разрешимых и перечислимых языков относительно теоретико-множественных и алгебраических операций — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м
Строка 1: Строка 1:
 
{{Теорема
 
{{Теорема
 
|statement=
 
|statement=
  Языки <tex> L_1, L_2 </tex> - разрешимы, тогда следующие языки разрешимы:
+
  Языки <tex> L_1, L_2 </tex> {{---}} разрешимы, тогда следующие языки разрешимы:
  
 
* Объединение <tex>L_1</tex> и <tex>L_2\ (L_1 \cup L_2)</tex>
 
* Объединение <tex>L_1</tex> и <tex>L_2\ (L_1 \cup L_2)</tex>
Строка 12: Строка 12:
  
 
|proof=
 
|proof=
Пусть <tex>p_1</tex> и <tex>p_2</tex> разрешающие программы для языков   
+
Пусть <tex>p_1</tex> и <tex>p_2</tex> {{---}} разрешающие программы для языков   
 
<tex>L_1</tex> и <tex>L_2</tex> соответственно. Для доказательства достаточно написать разрешающую программу (разрешитель) для каждого случая.  
 
<tex>L_1</tex> и <tex>L_2</tex> соответственно. Для доказательства достаточно написать разрешающую программу (разрешитель) для каждого случая.  
  
Строка 49: Строка 49:
 
     '''return''' 0   
 
     '''return''' 0   
  
Разрешитель будет перебирать все возможные разбиения данного ему слова на подслова, и для каждого проверять принадлежность <tex> L_1 </tex>. Если хотя бы в одном разбиении все подслова будут принадлежать <tex> L_1 </tex>, то все слово принадлежит <tex> L_1^* </tex>, иначе не принадлежит.  
+
Разрешитель будет перебирать все возможные разбиения данного ему слова на подслова, и для каждого проверять принадлежность <tex> L_1 </tex>. Если хотя бы в одном разбиении все подслова будут принадлежать <tex> L_1 </tex>, то все слово принадлежит <tex> L_1^* </tex>, иначе {{---}} не принадлежит.  
  
 
* Для языка <tex> L_1 L_2 : </tex>  
 
* Для языка <tex> L_1 L_2 : </tex>  
Строка 60: Строка 60:
 
     '''return''' 0   
 
     '''return''' 0   
  
Разрешитель будет перебирать все возможные разбиения на два слова и проверять принадлежность первого слова <tex> L_1 </tex> и второго слова <tex> L_2 </tex>. Если хотя бы для одного разбиения оба разрешителя вернут 1, то слово принадлежит <tex> L_1 L_2 </tex>, иначе не принадлежит.
+
Разрешитель будет перебирать все возможные разбиения на два слова и проверять принадлежность первого слова <tex> L_1 </tex> и второго слова <tex> L_2 </tex>. Если хотя бы для одного разбиения оба разрешителя вернут 1, то слово принадлежит <tex> L_1 L_2 </tex>, иначе {{---}} не принадлежит.
 
}}
 
}}
  
 
{{Теорема
 
{{Теорема
 
|statement=
 
|statement=
  Языки <tex> L_1, L_2 </tex> - перечислимы, тогда следующие языки перечислимы:
+
  Языки <tex> L_1, L_2 </tex> {{---}} перечислимы, тогда следующие языки перечислимы:
  
 
* Объединение <tex>L_1</tex> и <tex>L_2\ (L_1 \cup L_2)</tex>
 
* Объединение <tex>L_1</tex> и <tex>L_2\ (L_1 \cup L_2)</tex>
Строка 75: Строка 75:
 
|proof=
 
|proof=
  
Пусть <tex>p_1</tex> и <tex>p_2</tex> полуразрешающие программы для языков <tex>L_1</tex> и <tex>L_2</tex> соответственно. Для доказательства достаточно написать полуразрешающую программу для каждого случая. Заметим, что <tex>p_1</tex> и <tex>p_2</tex> могут зависнуть при использовании в полуразрешающей программе для соответствующего языка, но это допустимо.
+
Пусть <tex>p_1</tex> и <tex>p_2</tex> {{---}} полуразрешающие программы для языков <tex>L_1</tex> и <tex>L_2</tex> соответственно. Для доказательства достаточно написать полуразрешающую программу для каждого случая. Заметим, что <tex>p_1</tex> и <tex>p_2</tex> могут зависнуть при использовании в полуразрешающей программе для соответствующего языка, но это допустимо.
  
 
* Для языка <tex> L_1 \cup L_2 :</tex>  
 
* Для языка <tex> L_1 \cup L_2 :</tex>  
Строка 117: Строка 117:
 
{{Теорема
 
{{Теорема
 
|statement=
 
|statement=
  Языки <tex> L_1, L_2 </tex> - перечислимы, тогда следующие языки могут быть не перечислимы:
+
  Языки <tex> L_1, L_2 </tex> {{---}} перечислимы, тогда следующие языки могут быть не перечислимы:
  
 
* Дополнение <tex>L_1\ (\overline{L_1})</tex>
 
* Дополнение <tex>L_1\ (\overline{L_1})</tex>
Строка 130: Строка 130:
  
 
== Литература ==
 
== Литература ==
* ''Верещагин Н. К., Шень А.'' '''Лекции по математической логике и теории алгоритов. Часть 3. Вычислимые функции''' М.: МЦНМО, 1999
+
* ''Верещагин Н. К., Шень А.'' '''Лекции по математической логике и теории алгоритов. Часть 3. Вычислимые функции''' {{–--}} М.: МЦНМО, 1999

Версия 09:50, 20 декабря 2011

Теорема:
Языки [math] L_1, L_2 [/math] — разрешимы, тогда следующие языки разрешимы:
  • Объединение [math]L_1[/math] и [math]L_2\ (L_1 \cup L_2)[/math]
  • Пересечение [math]L_1[/math] и [math]L_2\ (L_1 \cap L_2)[/math]
  • Дополнение [math]L_1\ (\overline{L_1})[/math]
  • Разность [math]L_1[/math] и [math]L_2\ (L_1 \backslash L_2)[/math]
  • Декартово произведение [math]L_1[/math] и [math]L_2\ (L_1 \times L_2)[/math]
  • Замыкание Клини [math]L_1\ (L_1^*)[/math]
  • Конкатенация [math]L_1[/math] и [math]L_2\ (L_1 L_2)[/math]
Доказательство:
[math]\triangleright[/math]

Пусть [math]p_1[/math] и [math]p_2[/math] — разрешающие программы для языков [math]L_1[/math] и [math]L_2[/math] соответственно. Для доказательства достаточно написать разрешающую программу (разрешитель) для каждого случая.

  • Разрешающая программа для языка [math] L_1 \cup L_2 :[/math]
[math]p(x)[/math]
    return [math](p_1(x) == 1) \lor (p_2(x) == 1)[/math] 
  • Для языка [math] L_1 \cap L_2 :[/math]
[math]p(x)[/math]
    return [math](p_1(x) == 1) \land (p_2(x) == 1)[/math] 
  • Для языка [math] \overline{L_1} :[/math]
[math]p(x)[/math]
    return [math](p_1(x) == 0)[/math]
  • Для языка [math] L_1 \backslash L_2 :[/math]
[math]p(x)[/math]
    return [math](p_1(x) == 1) \land (p_2(x) == 0)[/math] 
  • Для языка [math] L_1 \times L_2 :[/math]
[math]p(\langle x, y \rangle)[/math]
    return [math](p_1(x) == 1) \land (p_2(y) == 1)[/math] 
  • Для языка [math]L_1^* :[/math]
[math]p(x)[/math]
    forall [math]d_i :[/math] все возможные разбиения
        [math]x_{d_1}x_{d_2} \ .. \ x_{d_n} :[/math] текущее разбиение [math]x[/math]
        if [math](p_1(x_{d_1}) == 1) \land (p_1(x_{d_2}) == 1) \land \ ... \ \land (p_1(x_{d_n}) == 1)[/math] 
                return 1
    return 0  

Разрешитель будет перебирать все возможные разбиения данного ему слова на подслова, и для каждого проверять принадлежность [math] L_1 [/math]. Если хотя бы в одном разбиении все подслова будут принадлежать [math] L_1 [/math], то все слово принадлежит [math] L_1^* [/math], иначе — не принадлежит.

  • Для языка [math] L_1 L_2 : [/math]
[math]p(x)[/math]
    forall [math]d_{1,2} :[/math] все возможные разбиения на две части
        [math]x_{d_1}x_{d_2} :[/math] текущее разбиение [math]x[/math]   
        if [math](p_1(x_{d_1}) == 1 \land p_2(x_{d_2}) == 1)[/math] 
                return 1
    return 0  
Разрешитель будет перебирать все возможные разбиения на два слова и проверять принадлежность первого слова [math] L_1 [/math] и второго слова [math] L_2 [/math]. Если хотя бы для одного разбиения оба разрешителя вернут 1, то слово принадлежит [math] L_1 L_2 [/math], иначе — не принадлежит.
[math]\triangleleft[/math]
Теорема:
Языки [math] L_1, L_2 [/math] — перечислимы, тогда следующие языки перечислимы:
  • Объединение [math]L_1[/math] и [math]L_2\ (L_1 \cup L_2)[/math]
  • Пересечение [math]L_1[/math] и [math]L_2\ (L_1 \cap L_2)[/math]
  • Декартово произведение [math]L_1[/math] и [math]L_2\ (L_1 \times L_2)[/math]
  • Замыкание Клини [math]L_1\ (L_1^*)[/math]
  • Конкатенация [math]L_1[/math] и [math]L_2\ (L_1 L_2)[/math]
Доказательство:
[math]\triangleright[/math]

Пусть [math]p_1[/math] и [math]p_2[/math] — полуразрешающие программы для языков [math]L_1[/math] и [math]L_2[/math] соответственно. Для доказательства достаточно написать полуразрешающую программу для каждого случая. Заметим, что [math]p_1[/math] и [math]p_2[/math] могут зависнуть при использовании в полуразрешающей программе для соответствующего языка, но это допустимо.

  • Для языка [math] L_1 \cup L_2 :[/math]
[math]p(x)[/math]
     for [math]k = 1 \ .. \ \infty[/math]
         if [math] (p_1(x)|_k == 1) \lor (p_2(x)|_k == 1) [/math]      
             return 1 
  • Для языка [math] L_1 \cap L_2 :[/math]
[math]p(x)[/math]
    if [math] (p_1(x) == 1) \land (p_2(x) == 1) [/math]      
        return 1 
  • Для языка [math] L_1 \times L_2 :[/math]
[math]p(\langle x, y \rangle)[/math]
    if [math] (p_1(x) == 1) \land (p_2(y) == 1) [/math]      
        return 1 
  • Для языка [math] L_1^* :[/math]
[math]p(x)[/math]
    forall [math]d_i :[/math] все возможные разбиения
        [math]x_{d_1}x_{d_2} \ .. \ x_{d_n} :[/math] текущее разбиение [math]x[/math]
        if [math](p_1(x_{d_1}) == 1) \land (p_1(x_{d_2}) == 1) \land \ ... \ \land (p_1(x_{d_n}) == 1)[/math]
                return 1
  • Для языка [math] L_1 L_2 : [/math]
[math]p(x)[/math]
    forall [math]d_{1,2} :[/math] все возможные разбиения на две части
        [math]x_{d_1}x_{d_2} :[/math] текущее разбиение [math]x[/math]   
        if [math](p_1(x_{d_1}) == 1 \land p_2(x_{d_2}) == 1)[/math]
                return 1
 
[math]\triangleleft[/math]


Теорема:
Языки [math] L_1, L_2 [/math] — перечислимы, тогда следующие языки могут быть не перечислимы:
  • Дополнение [math]L_1\ (\overline{L_1})[/math]
  • Разность [math]L_1[/math] и [math]L_2\ (L_1 \backslash L_2)[/math]
Доказательство:
[math]\triangleright[/math]

Рассмотрим язык [math] \overline{L_1} [/math]. Предположим, что он перечислим. Тогда, имея какое-либо слово, мы можем одновременно запустить перечислители для [math] L_1 [/math] и [math] \overline{L_1} [/math]. В какой-то момент времени слово появится либо в выводе перечислителя для [math] L_1 [/math], либо в выводе перечислителя для [math] \overline{L_1} [/math]. Тогда получится что [math] L_1 [/math] разрешим, так как про любое слово мы можем узнать принадлежит оно [math] L_1 [/math] или не принадлежит. Но мы знаем, что существуют перечислимые, но не разрешимые языки, следовательно, язык [math] \overline{L_1} [/math] может быть не перечислим.

Теперь рассмотрим [math] L_1 \backslash L_2 [/math]. В качестве [math] L_1 [/math] возьмем язык, состоящий из всех слов. Тогда получится, что язык [math] L_1 \backslash L_2 [/math] это [math] \overline{L_2} [/math]. Про язык [math] \overline{L_2} [/math] мы знаем, что он перечислим не всегда, следовательно и язык [math] L_1 \backslash L_2 [/math] также не всегда перечислим.
[math]\triangleleft[/math]

Литература

  • Верещагин Н. К., Шень А. Лекции по математической логике и теории алгоритов. Часть 3. Вычислимые функции Шаблон:–-- М.: МЦНМО, 1999