Вычислимые числа — различия между версиями
AMaltsev (обсуждение | вклад) м (правки форматирования) |
AMaltsev (обсуждение | вклад) |
||
| Строка 19: | Строка 19: | ||
: В противном случае, построим разрешитель для <tex> A </tex>: | : В противном случае, построим разрешитель для <tex> A </tex>: | ||
| − | ''' | + | '''function''' <tex> p(x)</tex>: |
| − | '''for''' <tex> n = 1 | + | '''for''' <tex> n = 1</tex> '''to''' <tex>\infty </tex>: |
'''if''' <tex> x < a(\dfrac1n) - \dfrac1n </tex>: | '''if''' <tex> x < a(\dfrac1n) - \dfrac1n </tex>: | ||
'''return''' 1 | '''return''' 1 | ||
| Строка 30: | Строка 30: | ||
: Построим функцию <tex> a(\varepsilon) </tex>: | : Построим функцию <tex> a(\varepsilon) </tex>: | ||
| − | ''' | + | '''function''' <tex> a(\varepsilon) </tex>: |
'''for''' <tex> x \in A </tex>: | '''for''' <tex> x \in A </tex>: | ||
'''if''' <tex> x + \varepsilon \notin A </tex>: | '''if''' <tex> x + \varepsilon \notin A </tex>: | ||
| Строка 54: | Строка 54: | ||
: Напишем программу, которая по числу <tex> n </tex> вычисляет <tex> n </tex>-ный знак числа <tex> \alpha </tex> после запятой: | : Напишем программу, которая по числу <tex> n </tex> вычисляет <tex> n </tex>-ный знак числа <tex> \alpha </tex> после запятой: | ||
| − | ''' | + | '''function''' <tex>p(n)</tex>: |
l = 0, r = 1 | l = 0, r = 1 | ||
| − | '''for''' <tex> k = 1 | + | '''for''' <tex> k = 1</tex> '''to''' <tex>n </tex>: |
<tex> m = \dfrac{l+r}2 </tex> | <tex> m = \dfrac{l+r}2 </tex> | ||
'''if''' <tex> m < \alpha</tex>: | '''if''' <tex> m < \alpha</tex>: | ||
| Строка 83: | Строка 83: | ||
<tex> \Longleftarrow </tex>: | <tex> \Longleftarrow </tex>: | ||
| − | : Пусть <tex> a(\varepsilon) = r_{N(\varepsilon)} </tex>, тогда <tex> \alpha </tex> вычислимо по определению. | + | : Пусть <tex dpi="150"> a(\varepsilon) = r_{N(\varepsilon)} </tex>, тогда <tex> \alpha </tex> вычислимо по определению. |
}} | }} | ||
| Строка 97: | Строка 97: | ||
Заметим, что <tex> |(\alpha \pm \beta) - (a \pm b)| \le |\alpha - a| \pm |\beta - b| </tex>, для произвольных рациональных <tex> a, b </tex>, значит, в качестве необходимых функций для <tex> \alpha + \beta </tex> и <tex> \alpha - \beta </tex> можно взять | Заметим, что <tex> |(\alpha \pm \beta) - (a \pm b)| \le |\alpha - a| \pm |\beta - b| </tex>, для произвольных рациональных <tex> a, b </tex>, значит, в качестве необходимых функций для <tex> \alpha + \beta </tex> и <tex> \alpha - \beta </tex> можно взять | ||
| − | <tex> f_{\alpha + \beta}(\varepsilon) = f_{\alpha}(\dfrac \varepsilon 2) + f_{\beta}(\dfrac \varepsilon 2) </tex> | + | <tex dpi="150"> f_{\alpha + \beta}(\varepsilon) = f_{\alpha}(\dfrac \varepsilon 2) + f_{\beta}(\dfrac \varepsilon 2) </tex> |
и | и | ||
| − | <tex> f_{\alpha - \beta}(\varepsilon) = f_{\alpha}(\dfrac \varepsilon 2) - f_{\beta}(\dfrac \varepsilon 2) </tex> | + | <tex dpi="150"> f_{\alpha - \beta}(\varepsilon) = f_{\alpha}(\dfrac \varepsilon 2) - f_{\beta}(\dfrac \varepsilon 2) </tex> |
соответственно (при подстановке в неравенство <tex> f_{\alpha} </tex> и <tex> f_{\beta} </tex> вместо <tex> a </tex> и <tex> b </tex> каждый модуль в правой части не превосходит <tex> \dfrac \varepsilon 2 </tex>, поэтому, <tex> f_{\alpha \pm \beta} </tex> не превосходит <tex> \varepsilon </tex>). | соответственно (при подстановке в неравенство <tex> f_{\alpha} </tex> и <tex> f_{\beta} </tex> вместо <tex> a </tex> и <tex> b </tex> каждый модуль в правой части не превосходит <tex> \dfrac \varepsilon 2 </tex>, поэтому, <tex> f_{\alpha \pm \beta} </tex> не превосходит <tex> \varepsilon </tex>). | ||
| Строка 115: | Строка 115: | ||
Убедимся в вычислимости числа <tex> \dfrac 1 \alpha </tex>: | Убедимся в вычислимости числа <tex> \dfrac 1 \alpha </tex>: | ||
| − | <tex> |\dfrac 1 \alpha - \dfrac1a| \le \dfrac {|a - \alpha|}{a a_\alpha} </tex>, где <tex> a_\alpha \in \mathbb Q, |a_\alpha| < |\alpha| </tex>. | + | <tex dpi="150"> |\dfrac 1 \alpha - \dfrac1a| \le \dfrac {|a - \alpha|}{a a_\alpha} </tex>, где <tex> a_\alpha \in \mathbb Q, |a_\alpha| < |\alpha| </tex>. |
| − | <tex> f_{\ | + | <tex dpi="150"> f_{\frac 1 \alpha}(\varepsilon) = f_{\alpha}(\varepsilon a a_\alpha) </tex>. |
Отсюда, <tex> \dfrac \alpha \beta = \dfrac1 \alpha \beta </tex> также вычислимо. | Отсюда, <tex> \dfrac \alpha \beta = \dfrac1 \alpha \beta </tex> также вычислимо. | ||
| Строка 135: | Строка 135: | ||
Заметим, что для вычислимого <tex> t </tex> значение <tex> P(t) </tex> также вычислимо, так как в процессе его вычисления используются только операции, вычислимость значений которых уже была ранее доказана. | Заметим, что для вычислимого <tex> t </tex> значение <tex> P(t) </tex> также вычислимо, так как в процессе его вычисления используются только операции, вычислимость значений которых уже была ранее доказана. | ||
| − | Теперь, если полином имеет разные знаки на отрезках <tex> [a; x] </tex> и <tex> [x; b] </tex>, то для поиска <tex> x </tex> можно воспользоваться двоичным поиском | + | Теперь, если полином имеет разные знаки на отрезках <tex> [a; x] </tex> и <tex> [x; b] </tex>, то для поиска <tex> x </tex> можно воспользоваться двоичным поиском нуля на <tex> [a; b] </tex>, иначе {{---}} троичным поиском экстремума на <tex> [a; b] </tex>. |
Останавливая тот или иной алгоритм, когда текущая длина интервала становится меньше <tex> \varepsilon </tex> и возвращая левую границу в качестве ответа, получаем функцию <tex> a_x(\varepsilon) </tex>. | Останавливая тот или иной алгоритм, когда текущая длина интервала становится меньше <tex> \varepsilon </tex> и возвращая левую границу в качестве ответа, получаем функцию <tex> a_x(\varepsilon) </tex>. | ||
| Строка 154: | Строка 154: | ||
Построим функцию <tex> a(\varepsilon) </tex>, которая дает приближение к <tex> \alpha </tex> с точностью до <tex> \varepsilon </tex>: | Построим функцию <tex> a(\varepsilon) </tex>, которая дает приближение к <tex> \alpha </tex> с точностью до <tex> \varepsilon </tex>: | ||
| − | ''' | + | '''function''' <tex> a(\varepsilon) </tex>: |
n = <tex> N(\dfrac \varepsilon 2) + 1 </tex> | n = <tex> N(\dfrac \varepsilon 2) + 1 </tex> | ||
'''return''' <tex> p_n(\dfrac \varepsilon 2) </tex> | '''return''' <tex> p_n(\dfrac \varepsilon 2) </tex> | ||
| Строка 183: | Строка 183: | ||
: По определению <tex> \alpha </tex>, множество <tex> A = \{ a \in \mathbb Q \mid a < \alpha \} </tex> перечислимо. Кроме того, <tex> \sup A = \alpha </tex>. | : По определению <tex> \alpha </tex>, множество <tex> A = \{ a \in \mathbb Q \mid a < \alpha \} </tex> перечислимо. Кроме того, <tex> \sup A = \alpha </tex>. | ||
| − | : По определению нижней грани, <tex> \forall \varepsilon > 0\ \exists x_\varepsilon \in A: \varepsilon > \alpha - x_\varepsilon </tex>. Тогда можно взять, например, последовательность <tex> a_n = x_{\ | + | : По определению нижней грани, <tex> \forall \varepsilon > 0\ \exists x_\varepsilon \in A: \varepsilon > \alpha - x_\varepsilon </tex>. Тогда можно взять, например, последовательность <tex dpi="150"> a_n = x_{\frac{1}{n}} </tex>. |
<tex>\Longleftarrow</tex>: | <tex>\Longleftarrow</tex>: | ||
| Строка 189: | Строка 189: | ||
: Построим полуразрешитель для множества <tex> A </tex>: | : Построим полуразрешитель для множества <tex> A </tex>: | ||
| − | ''' | + | '''function''' <tex>p(x)</tex>: |
| − | '''for''' n in <tex>1 | + | '''for''' n in <tex>1</tex> '''to''' <tex>\infty</tex>: |
'''if''' <tex> x < a_n </tex>: | '''if''' <tex> x < a_n </tex>: | ||
'''return''' 1 | '''return''' 1 | ||
| Строка 210: | Строка 210: | ||
== Последовательность Шпеккера == | == Последовательность Шпеккера == | ||
| − | Множество всех программ | + | Множество всех программ счётно, поэтому множество вычислимых чисел также счётно. Однако, множество вещественных чисел несчётно, значит, существуют невычислимые вещественные числа. Построим явно пример такого числа. |
{{Определение | {{Определение | ||
| Строка 231: | Строка 231: | ||
== Источники информации == | == Источники информации == | ||
| − | * ''Верещагин Н. К., Шень А.'' Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции — М.: МЦНМО, 1999 - | + | * ''Верещагин Н. К., Шень А.'' {{---}} Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции — М.: МЦНМО, 1999 {{---}} стр. 14 |
* [http://en.wikipedia.org/wiki/Computable_number Computable number] | * [http://en.wikipedia.org/wiki/Computable_number Computable number] | ||
* [http://en.wikipedia.org/wiki/Specker_sequence Specker sequence] | * [http://en.wikipedia.org/wiki/Specker_sequence Specker sequence] | ||
| + | [[Категория: Теория формальных языков]] | ||
[[Категория: Теория вычислимости]] | [[Категория: Теория вычислимости]] | ||
| − | |||
Версия 21:24, 20 ноября 2016
В математике натуральные, целые и рациональные числа являются конструктивными объектами, поэтому их использование в теории вычислимости не требует особых уточнений. В то же время, действительные числа, которые необходимы для применения методов математического анализа, определяются неконструктивно. Предложенный далее метод позволяет построить конструктивные объекты, во многом схожие с обычными действительными числами.
Содержание
Вычислимые числа
| Определение: |
| Действительное число называется вычислимым (англ. computable number), если существует вычислимая функция , такая, что для любого рационального . |
Свойства
| Теорема: |
Число вычислимо тогда и только тогда, когда множество разрешимо. |
| Доказательство: |
|
:
function : for to : if : return 1 if : return 0 :
function : for : if : return x
|
Важное замечание: построенное нами доказательство неконструктивно, так как мы не знаем наперед, рационально ли число , и уж тем более не пытаемся понять в случае его рациональности, чему именно оно равно. Но, так как мы ставим целью исследование свойств вычислимых чисел, а не явное построение соответствующих этим свойствам программ, то нам это доказательство полностью подходит.
С учетом только что доказанной теоремы, далее при проверке на принадлежность числа множеству будем писать просто .
| Теорема: |
Число вычислимо тогда и только тогда, когда последовательность знаков представляющей его двоичной записи вычислима. |
| Доказательство: |
|
:
function : l = 0, r = 1 for to : if : l = m, t = 1 else: r = m, t = 0 return t :
|
| Определение: |
| Последовательность рациональных чисел вычислимо сходится к , если существует вычислимая функция , такая, что для любого рационального выполняется . |
| Теорема: |
Число вычислимо тогда и только тогда, когда существует вычислимая последовательность рациональных чисел, вычислимо сходящаяся к . |
| Доказательство: |
|
:
:
|
| Теорема: |
Пусть числа вычислимы. Тогда также вычислимы числа , , и . |
| Доказательство: |
|
В пределах этого доказательства будем обозначать функцию-приближение для произвольного вычислимого числа как . Для того, чтобы получить приближение для результата операции, нам нужно выразить функцию-результат через приближения для операндов. Заметим, что , для произвольных рациональных , значит, в качестве необходимых функций для и можно взять
и
соответственно (при подстановке в неравенство и вместо и каждый модуль в правой части не превосходит , поэтому, не превосходит ). Далее, так как , где (, очевидно, можно найти за конечное время), то . Убедимся в вычислимости числа : , где . . Отсюда, также вычислимо. |
| Теорема: |
Корень многочлена с вычислимыми коэффициентами вычислим. |
| Доказательство: |
|
Пусть — корень многочлена с вычислимыми коэффициентами. Если , то его можно найти точно, перебрав все рациональные числа. Иначе, выберем некоторый интервал ( — вычислимы), достаточно малый, чтобы полином был монотонным на отрезках и . Заметим, что для вычислимого значение также вычислимо, так как в процессе его вычисления используются только операции, вычислимость значений которых уже была ранее доказана. Теперь, если полином имеет разные знаки на отрезках и , то для поиска можно воспользоваться двоичным поиском нуля на , иначе — троичным поиском экстремума на . Останавливая тот или иной алгоритм, когда текущая длина интервала становится меньше и возвращая левую границу в качестве ответа, получаем функцию . |
| Теорема: |
Предел вычислимо сходящейся вычислимой последовательности вычислимых чисел вычислим. |
| Доказательство: |
|
Пусть рассматриваемая последовательность — , и . Запишем формально данные нам условия:
Здесь функции , и все вычислимы. Построим функцию , которая дает приближение к с точностью до : function : n = returnТак как , первое слагаемое меньше по выбору , второе — в силу вычислимости , то , и действительно вычисляет требуемое приближение. |
Перечислимые числа
| Определение: |
| Действительное число называется перечислимым снизу (англ. recursively enumerable number), если множество перечислимо. |
| Определение: |
| Действительное число называется перечислимым сверху, если множество перечислимо. |
Свойства
| Теорема: |
Число перечислимо снизу тогда и только тогда, когда существует вычислимая возрастающая последовательность рациональных чисел, пределом которой является . |
| Доказательство: |
|
:
:
function : for n in to : if : return 1
|
| Теорема: |
Число вычислимо тогда и только тогда, когда оно перечислимо сверху и снизу. |
| Доказательство: |
|
Обозначим множества и за и соответственно. Если рационально, то необходимые (полу)разрешители строятся тривиально. В противном случае, так как , то перечислимость множеств и равносильна разрешимости множества , которая, в свою очередь, равносильна вычислимости . |
Последовательность Шпеккера
Множество всех программ счётно, поэтому множество вычислимых чисел также счётно. Однако, множество вещественных чисел несчётно, значит, существуют невычислимые вещественные числа. Построим явно пример такого числа.
| Определение: |
| Пусть — некоторое перечислимое, но неразрешимое множество натуральных чисел. Занумеруем его элементы. Последовательностью Шпеккера называется последовательность рациональных чисел, -ный член которой определяется как . |
Данная последовательность строго возрастает и ограничена числом , следовательно, по признаку Вейерштрасса, она сходится.
| Теорема: |
Число перечислимо снизу, но невычислимо. |
| Доказательство: |
|
перечислимо снизу, как предел возрастающей вычислимой последовательности рациональных чисел. Допустим теперь, что вычислимо. Пусть . Рассмотрим двоичную запись числа , если ее -ный знак после запятой равен 1, то , иначе — . Мы построили разрешитель для множества . Тем не менее, мы знаем, что — неразрешимое множество, и это невозможно, значит, невычислимо. |
Источники информации
- Верещагин Н. К., Шень А. — Лекции по математической логике и теории алгоритмов. Часть 3. Вычислимые функции — М.: МЦНМО, 1999 — стр. 14
- Computable number
- Specker sequence