Чего не могут вычислительные машины: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 285:
 
===Теорема 1===
Неразрешимо свойство «''Машина Тьюринга'' <math>\mathfrak{M}</math> останавливается, будучи запущенной на данных <math>X</math>»
Свойство
«''Машина Тьюринга'' <math>\mathfrak{M}</math> останавливается, будучи запущенной на данных <math>X</math>»
неразрешимо.
 
 
Таким образом, если нетривиальное функциональное свойство программ перечислимо, то его дополнение не перечислимо.
В частности, не перечислимо множество машин, не заканчивающих работу при фиксированных исходных данных.
 
{{Рамка}}
'''Доказательство'''
 
Предположим противное, что данное свойство разрешимо. Тогда имеется машина <math>\mathfrak{A}</math>, которая
всегда останавливается и даёт на ленте <math>\cdots</math>BBB<i>M</i>A<i>X</i>EEE<math>\cdots</math>
Строка 318 ⟶ 314 :
 
Итак, сделанное нами предположение о существовании машины, распознающей применимость, опровергнуто.
{{Акмар}}
 
<b>'''Следствие 1:</b>''' Есть машина, непродолжимая до всюду определённой.
'''Конец доказательства'''
 
 
<b>Следствие 1:</b> Есть машина, непродолжимая до всюду определённой.
Таковой является, в частности, любая универсальная машина.
 
Строка 329 ⟶ 323 :
машины, и практически лишь из него.
 
Отсюда следует важнейший практический вывод: понятие ошибки в программе не устранимо даже <b>'''в принципе</b>'''.
С ними необходимо бороться (как и с бесами в душе), но победить их до конца невозможно (как и Дьявола).
 
Строка 352 ⟶ 346 :
Этот список можно продолжать очень долго. Есть и критерии, которые позволяют ответить на вопрос о неразрешимости сразу для некоторого класса свойств. Приведем самый известный и одновременно самый практически полезный из них.
 
<b>'''Определение 2:</b>''' Свойство <math>P</math> программ называется <b>'''функциональным</b>''', если для любых двух программ <math>a</math>, <math>b</math>, вычисляющих одну и ту же функцию, <math>P(a) \iff P(b)</math>.
 
<b>'''Теорема 2</b>''' (Теорема Райса-Успенского): Есть лишь два разрешимых функциональных свойства программ: тождественно истинное и тождественно ложное.
 
Множество объектов называется <b>'''перечислимым</b>''', если есть алгоритм,
который ничего не получает на вход, а последовательно выводит на выход объекты из этого
множества, то есть для любого объекта этого множества наступит
момент, когда алгоритм его выведет.
 
<b>'''Задача</b>''': Покажите что всякое разрешимое множество перечислимо.
 
<b>'''Вопрос</b>''': Существует ли перечислимое, но не разрешимое множество?
 
{{Рамка}}
<b>'''Доказательство</b>'''
Пусть <math>P</math>&mdash; функциональное разрешимое свойство, не являющееся
тривиальным. Тогда есть такие программы <math>a</math> и <math>b</math>, что <math>P(a)</math>
истинно, а <math>P(b)</math> ложно. Поскольку <math>P</math> всюду определено, оно
либо истинно, либо ложно на программе для нигде не определённой
функции (т.н. функции <ttcode>ошибка</ttcode>). Заменим ту из программ,
значение которой совпадает с функцией <ttcode>ошибка</ttcode>, на
программу для функции <ttcode>ошибка</ttcode>. Пусть это будет <math>a</math>
(второй случай рассматривается абсолютно симметрично).
<math>P(a^\prime)</math> истинно также для любой программы <math>a^\prime</math>,
вычисляющей ту же функцию, что и <math>a</math>, и ложно для любой
программы <math>b^\prime</math>, вычисляющей ту же функцию, что и <math>b</math>.
Рассмотрим теперь произвольную программу <ttcode>f</ttcode> и построим алгоритм
(машину, функцию, комбинатор: конкретное понятие алгоритма здесь
безразлично, слишком простое построение):
<code>if f(0)=0 then b(x) else b(x)</code>.
 
Она будет вычислять <ttcode>b(x)</ttcode>, если <ttcode>f(0)</ttcode> выдаст какое-то значение, и нигде не определённую функцию, если <ttcode>f(0)</ttcode> не определено. А теперь, применив <ttcode>P</ttcode>, решим неразрешимую проблему применимости.
if f(0)=0 then b(x) else b(x).
{{Рамка}}
 
Она будет вычислять <tt>b(x)</tt>, если <tt>f(0)</tt> выдаст какое-то значение, и нигде не определённую функцию, если <tt>f(0)</tt> не определено. А теперь, применив <tt>P</tt>, решим неразрешимую проблему применимости.
<b>Конец доказательства</b>
 
==Метод Британского музея==