Универсальная функция — различия между версиями
Строка 6: | Строка 6: | ||
Аналогично определяется универсальная функция для класса всюду определенных вычислимых функций одного аргумента. | Аналогично определяется универсальная функция для класса всюду определенных вычислимых функций одного аргумента. | ||
+ | |||
+ | {{Теорема | ||
+ | |statement=Существует универсальная функция | ||
+ | |proof=Зафиксируем какой-либо язык программирования. Пусть программами на этом языке являются слова над алфавитом <tex>\Sigma</tex>. Программа будет иметь номер <tex>n</tex>, если ее код - <tex>n</tex>-е слово среди всех слов над алфавитом <tex>\Sigma</tex>, отсортированных сначала по возрастанию длины, а при равной длине - в лексикографическом порядке. При этом если <tex>n</tex>-я программа не компилируется, будем считать, что она всегда зависает. Рассмотрим функцию <tex>U(n,x):\mathbb{N}\times\mathbb{N}\rightarrow\mathbb{N}\cup\perp</tex> такую, что <tex>U(n,x)=p_n(x)</tex>, где <tex>p_n</tex> - <tex>n</tex>-я программа. Заметим, что по определению вычислимой функции существует программа, вычисляющая ее. Но в заданной нумерации у любой программы есть номер. Таким образом для любой вычислимой функции <tex>f</tex> существует номер <tex>n: U(n,x)=f(x)</tex>. И наоборот - <tex>f_n=U(n)</tex> - является вычислимой функцией. Вычисляющая программа для <tex>U</tex> содержит интерпретатор для зафиксированного языка программирования, по номеру программы (первый аргумент) восстанавливает ее код, и передает ей второй аргумент, возвращая результат ее работы. Таким образом <tex>U_n(x)=U(n,x)</tex> - вычислима для любого <tex>n\in\mathbb{N}</tex>, и <tex>\forall f(x) \exists n\in\mathbb{N}: f(x)=U(n,x)</tex>, <tex>f(x)</tex> - вычислима, значит U(n,x) - универсальная функция. | ||
+ | }} | ||
+ | |||
+ | |||
+ | |||
{{Теорема | {{Теорема | ||
|statement = Для класса вычислимых функций одного аргумента существует вычислимая универсальная функция. | |statement = Для класса вычислимых функций одного аргумента существует вычислимая универсальная функция. |
Версия 23:02, 16 января 2014
В этом разделе равенство двух вычислимых функций при заданных аргументах понимается в том смысле, что при этих аргументах вычисляющие программы для этих функций зависают, либо равны значения, возвращаемые ими.
Определение: |
Функция вычислимых функций одного аргумента, если является вычислимой функцией и вычислимой функции | называется универсальной (universal function) для класса
Менее формально, для универсальной функции должно выполняться следующее: "сечение" функции
является вычислимой функцией и все вычислимые функции одного аргумента встречаются среди (отсюда универсальность). Универсальная функция нужна, например, для того, чтобы показать, что существует перечислимое неразрешимое множество (на самом деле это множество таких , для которых определено).Аналогично определяется универсальная функция для класса всюду определенных вычислимых функций одного аргумента.
Теорема: |
Существует универсальная функция |
Доказательство: |
Зафиксируем какой-либо язык программирования. Пусть программами на этом языке являются слова над алфавитом | . Программа будет иметь номер , если ее код - -е слово среди всех слов над алфавитом , отсортированных сначала по возрастанию длины, а при равной длине - в лексикографическом порядке. При этом если -я программа не компилируется, будем считать, что она всегда зависает. Рассмотрим функцию такую, что , где - -я программа. Заметим, что по определению вычислимой функции существует программа, вычисляющая ее. Но в заданной нумерации у любой программы есть номер. Таким образом для любой вычислимой функции существует номер . И наоборот - - является вычислимой функцией. Вычисляющая программа для содержит интерпретатор для зафиксированного языка программирования, по номеру программы (первый аргумент) восстанавливает ее код, и передает ей второй аргумент, возвращая результат ее работы. Таким образом - вычислима для любого , и , - вычислима, значит U(n,x) - универсальная функция.
Теорема: |
Для класса вычислимых функций одного аргумента существует вычислимая универсальная функция. |
Доказательство: |
Занумеруем программы нашего языка натуральными числами. Рассмотрим функцию | , где — -ая программа в указанной нумерации. вычислимой функции . , очевидно, является вычислимой функцией. Значит — универсальная функция для класса вычислимых функций одного аргумента. Очевидно, что вычислима. Действительно, для того, чтобы вычислить , достаточно вернуть вывод программы на входе .
Теорема: |
Для класса всюду определенных вычислимых функций одного аргумента не существует всюду определенной вычислимой универсальной функции. |
Доказательство: |
От противного. Пусть | — всюду определенная вычислимая универсальная функция для класса всюду определенных вычислимых функций одного аргумента. Воспользуемся теперь диагональным методом. Рассмотрим всюду определенную вычислимую функцию одного аргумента . в силу того, что — универсальная для соответствующего класса функций. Так как всюду определена, то она не зависает на аргументе . Значит , но в то же время . Противоречие.
Отметим, что функция
называется диагональной (отсюда и пошло название метода).Литература
В. А. Успенский Лекции о вычислимых функциях — М.: ГИФМЛ, 1960, с. 203