Принцесса или тигр? (Смаллиан) - страница 136

Теперь представим себе, что программа для генерирующей машины записывается не на естественном языке, а кодируется в виде некоторого целого числа (представляющего собой цепочку цифр); кодирование можно осуществить так, чтобы каждое положительное целое число представляло собой номер определенной программы. Пусть М>n — это машина, программа которой имеет кодовый номер n. Расположим теперь все генерирующие машины в виде бесконечной последовательности М>1, М>2…, М>n… (М>1 — это машина с номером программы 1, М>2 — машина с номером программы 2 и т. д.)

Для любого множества чисел А (естественно, имеется в виду множество положительных целых чисел) и для любой машины M мы будем говорить, что машина M генерирует множество А, или, иначе, машина M перечисляет множество А, если каждое число, входящее в множество А, в конце концов будет напечатано машиной M, и в то же время ни одно число, не входящее в А, этой машиной напечатано не будет. Множество А мы будем называть эффективно перечислимым (иногда говорят — рекурсивно перечислимым), если существует хотя бы одна машина М>i которая перечисляет множество А. Кроме того, мы будем говорить, что множество А разрешимо (или рекурсивно), если существуют одна машина М>i, которая перечисляет само множество А, и другая машина М>j которая перечисляет множество всех чисел, не входящих в А. Таким образом, множество А является разрешимым том и только том случае, если и A, и его дополнение являются эффективно перечислимыми.

Предположим, что множество А — разрешимо и у нас имеются машина М>i, которая генерирует А, и машина М>j которая генерирует дополнение . Тогда оказывается, что существует эффективный способ, позволяющий определять, входит ли некоторое число n в множество А или нет. Допустим, к примеру, нас интересует, входит ли в множество А число 10. Мы приводим в действие обе машины одновременно и ждем. Если число 10 принадлежит множеству А, то рано или поздно это число будет напечатано машиной М>i, так что мы сразу узнаем, что число 10 входит в А. Если же число 10 не принадлежит множеству А, то в конце концов это число напечатает машина М>j — тем самым мы сразу узнаем, что число 10 не входит в А. Таким образом, в конечном итоге мы обязательно выясним, принадлежит ли число 10 множеству А или нет. (Понятно, что сказать заранее, сколько нам придется ждать, невозможно; нам известно лишь, что через какой-то конечный промежуток времени мы непременно узнаем ответ.)

Предположим теперь, что множество А эффективно перечислимо, но неразрешимо. В таком случае у нас имеется машина