Легко запутаться в том, что значит «представлять» или «реализовывать» действительное число. Фактически, мы являемся свидетелями обсуждения в комментариях, где представление является спорным. Итак, позвольте мне сначала обратиться к этому.
Как мы узнаем, что реализация верна?
Теория, которая объясняет, как представлять вещи в компьютере, - это реализуемость . Основная идея состоит в том, что для заданного множества мы выбираем тип данных τ и для каждого x ∈ X набор значений типа τ, которые его реализуют . Мы пишем v ⊢ x ∈ X, когда v - значение, которое реализует x . Например (я буду использовать Haskell без веской причины), разумной реализацией N может быть тип данных, где v ⊢ k ∈ N, когда vXτx∈Xτv⊢x∈XvxNInteger
v⊢k∈Nvвычисляется в позьем (таким образом , в частности , не представляет собой натуральное число, и ни один не делает расходящиеся программы). Но некоторые джокер могли ходить и предположить , что мы используем для представления натуральных чисел с Т г ¯u е ⊢ 42 ∈ N и F L сек е ⊢ п ∈ N для п ≠ 42 . Почему это неправильно? Нам нужен критерий .k¯¯¯-42
Bool
True⊢42∈NF a l s e ⊢n∈ Nn ≠ 42
В случае «чисел джокера» легко заметить, что сложение невозможно. Предположим, я говорю вам, что у меня есть два числа, оба представленные как . Можете ли вы дать реализатору их сумму? Ну, это зависит от того, является ли сумма 42, но вы не можете сказать. Поскольку сложение является «неотъемлемой частью натуральных чисел», это недопустимо. Другими словами, реализация не о наборах, а о структурах , то есть мы должны представлять наборы таким образом, чтобы можно было также реализовать соответствующую структуру. Позвольте мне подчеркнуть это:Р л ы е
Мы реализуем структуры, а не голые наборы. Следовательно, мы должны иметь возможность реализовать всю структуру вместе с операциями и всеми аксиомами, чтобы реализация была правильной.
Если вы не соблюдаете этот принцип, то вам нужно предложить альтернативный математический критерий правильности. Я не знаю ни одного.
Пример: представление натуральных чисел
Для натуральных чисел соответствующая структура описывается аксиомами Пеано, и ключевой аксиомой, которая должна быть реализована, является индукция (но также , преемник, + и × ). Мы можем вычислить, используя реализуемость, что делает реализация индукции. Оказывается, это карта (где еще неизвестный тип данных, представляющий натуральные числа)0+×nat
induction : 'a -> (nat -> 'a -> 'a) -> 'nat -> 'a
удовлетворяющие induction x f zero = x
и induction x f (succ n) = f n (induction x f n)
. Все это исходит из реализуемости. У нас есть критерий: реализация натуральных чисел правильна, если она позволяет реализовать аксиомы Пеано. Аналогичный результат будет получен , если мы использовали характеристику чисел в качестве исходной алгебры для функтора .Икс↦ 1 + Х
Правильная реализация действительных чисел
Давайте обратим внимание на реальные цифры и на рассматриваемый вопрос. Первый вопрос, который нужно задать: «Какова соответствующая структура действительных чисел?» Ответ: Архимедова Коши завершено упорядоченным полем . Это установленное значение «реальных чисел». Вы не можете изменить его, это было исправлено другими для вас (в нашем случае альтернативные реалы Дедекинда оказываются изоморфными реалам Коши, которые мы здесь рассматриваем.) Вы не можете отобрать какую-либо часть этого, Вам не разрешено говорить «мне все равно, что нужно добавить», или «мне все равно, что делать». Если вы сделаете это, вы не должны называть это «действительными числами», а что-то вроде «действительных чисел, когда мы забываем о линейном порядке».
Я не буду вдаваться во все детали, но позвольте мне объяснить, как различные части структуры выполняют различные операции с реалами:
- архимедова аксиома о вычислении рациональных приближений вещественных чисел
- структура поля дает обычные арифметические операции
- линейный порядок дает нам полуразрешимую процедуру для проверки х < у
- полнота Коши дает нам функцию ,
lim : (nat -> real) -> real
которая принимает (представление) быструю последовательность Коши и возвращает его предел. (Последовательность является быстрой, если | x n - x m | ≤ 2 мин ( n , m ) для всех m , n .)( хN)N| ИксN- хм| ≤ 2мин ( н , м )м , н
То, что мы не получаем, является тестовой функцией на равенство. Там нет ничего аксиом для вещественных чисел , который спрашивает , что разрешимо. (Напротив, аксиомы Пеано подразумевают, что натуральные числа разрешимы, и вы можете доказать это, используя только забавное упражнение).знак равноeq : nat -> nat -> Bool
induction
Фактом является то, что обычное десятичное представление вещественных чисел, которое использует человечество, является плохим, потому что с его помощью мы даже не можем реализовать сложение. С плавающей точкой с бесконечной мантиссой тоже происходит сбой (упражнение: почему?). Что работает, тем не менее, это представление со знаком цифр, то есть такое, в котором мы допускаем как отрицательные, так и положительные цифры. Или мы могли бы использовать последовательности рациональных чисел, которые удовлетворяют быстрому тесту Коши, как указано выше.
Представление Tsuyoshi также реализует что-то, но не р
Рассмотрим следующее представление вещественных чисел: вещественное число представлено парой ( q , b ), где (Икс( д, Б ) - быстрая последовательность Коши, сходящаяся к x, а b - логическое значение, указывающее,являетсяли x целым числом. Чтобы это было представление реалов, нам нужно было бы реализовать сложение, но, как оказалось, мы не можем вычислить логические флаги. Так что этонепредставление реалов. Но это все же представляет что-то, а именно подмножество вещественных чисел Z ∪ ( R ∖ Z )( дN)NИксбИксZ ∪( R ∖ Z ), Действительно, согласно интерпретации реализуемости объединения осуществляется с флагом , указывающим , какая часть союза мы находимся. Кстати, является не равняться R , если вы не верите в исключенном третьем, что не может быть реализовано и, следовательно, совершенно не имеет значения для этого обсуждения. Мы из вынуждены компьютеры делать вещи интуиционистски.Z ∪( R ∖ Z )р
Мы не можем проверить, является ли действительное число целым
Наконец, позвольте мне ответить на вопрос, который был задан. Теперь мы знаем, что приемлемым представлением вещественных чисел является одно из быстрых последовательностей Коши рациональных чисел. (Важная теорема утверждает, что любые два представления действительных чисел на самом деле вычислимо изоморфны.)
Теорема: проверка того, является ли действительное число целым, не разрешима.
Доказательство. Предположим, мы могли бы проверить, является ли действительное целым числом (конечно, действительное реализуется быстрой последовательностью Коши). Идея, которая позволит вам доказать гораздо более общую теорему, если вы хотите, состоит в том, чтобы построить быструю последовательность Коши из нецелых чисел, которая сходится к целому числу. Это легко, просто возьмите x n = 2 - n . Затем решите проблему с остановкой следующим образом. Для заданной машины Тьюринга T определите новую последовательность ( y n ) n с помощью
y n = { x n, если T( хN)NИксN= 2- нT( уN)Nвыполняется, но затем она «застревает» вxm,еслиTостанавливается на этапеm. Очень важно, что новая последовательность также является быстрой последовательностью Коши (и мы можем доказать это, не зная,останавливаетсялиT). Поэтому мы можем вычислить его пределz=limnyn
YN= { хNИксмесли Т не остановился в течение n шаговесли Т остановился на шаге m и m ≤ n
То есть новая последовательность выглядит как последовательность
до тех пор, пока
T(xn)nTxmTмTZ= лимNYNпотому что наше представление реалов является правильным. Проверьте, является ли
целым числом. Если это так, то это должно быть
0, и это происходит только в том случае, если
T работает вечно. В противном случае
z не является целым числом, поэтому
T, должно быть, остановился. QED.
Z0TZT
Упражнение: адаптируйте приведенное выше доказательство, чтобы показать, что мы не можем проверить рациональные числа. Затем адаптируйте его, чтобы показать, что мы не можем тестировать ничего нетривиального (это немного сложнее).
Иногда люди запутываются во всем этом тестировании бизнеса. Они думают, что мы доказали, что никогда не сможем проверить, является ли реальное целым числом. Но, конечно, 42 - это настоящее число, и мы можем сказать, является ли оно целым числом. Фактически, любая конкретная реальность, которую мы придумаем, , 88 ln 89 , e π √грех1188 лн89 и т. Д., Мы можем прекрасно определить, являются ли они целыми числами. Точно,мыможем сказать, потому чтоу насесть дополнительная информация: эти вещественные значения даны нам не как последовательности, а как символические выражения, из которых мы можем вычислить бит Цуёси. Как только единственная информация, которую мы имеем о реальном, - это последовательность сходящихся к нему рациональных приближений (и яимею в видунесимволическое выражение, описывающее последовательность, а черный ящик, который выводитn-йчлен на входеn), тогда мы будет так же беспомощен, как машины.еπ163√NN
Мораль истории
Нет смысла говорить о реализации набора, если мы не знаем, какие операции мы хотим с ним выполнить.