0,2
рейтинг
2 февраля 2015 в 03:33

Разработка → Делить на ноль — это норма. Часть 2

Часть 1. Вобще-то уже все поделили до нас!
Часть 2. Истина где-то рядом

В прошлой части мы расширяли алгебру и смогли делить на ноль арифметически. В качестве бонуса, способ оказался не единственным. Однако, все эти алгебры не дали ответа на вопрос: “Что там внутри или почему нам это не показывают?”

Пока древние вязали узелки, такой вопрос возникнуть не мог. Сейчас, куда не глянь, “бла-бла, для а≠0”. Значит ответ затаился где-то между узелками и настоящим. В математике все строго и последовательно, а значит и ответ не мог потеряться.


Мы попробуем приблизиться к ответу настолько близко насколько это возможно. Эта часть практически полностью посвящена философии арифметики. Скорее всего часть материала будет для Вас тривиальной. Однако у нас тут не повтор школьного курса арифметики.

Материал построен так, чтобы выделить структуру арифметики. Мы будем вгрызаться в нее с разных сторон и отрывать слои. Цель — понять, что на чем лежит.

2. Истина где-то рядом


2.1 Зачем вообще напрягаться?


Чтобы снова броситься в дебри, хотелось бы понять, почему этот вопрос периодически возникает и ради чего стоит искать ответ.

Давайте вспомним школьные годы, то время, когда нам впервые сказали: “На ноль делить нельзя, — вот так вот категорично. — Нельзя и все!”. А ведь до того в математике все было логично и последовательно. Складывали арбузы и вычитали дыни, яблоки перекатывали. Откуда не возьмись, на самом старте изучения математики, появился первый запретный плод.

Классический набор ответов только расстраивает
  • «Нельзя и все!» или «Проверь на калькуляторе» — без комментариев. Особая педагогическая методика.

  • «Яблоко можно разделить на двоих. Тебя и друга Колю. Можно на троих. А если на ноль человек делить, то сколько раз разрезать нужно?» — да, непонятно выходит. Да и вопросом на вопрос отвечать неприлично. А учитель-то для чего? Твердят что математика “красивая”, математика “царица”, а тут такой конфуз.

  • “2∙0=0 и 3∙0=0, поделим оба равенства на ноль, то выходит что 2=0/0 и 3=0/0. Значит 2=3 что ли?” — пример, конечно, наглядный. Но такие примеры мало того что на вопрос ответа не дают, так еще и страх перед наукой сеют. А вдруг еще на что делить нельзя или умножать. А вдруг поскользнусь. А может учитель сам не разобрался?

  • «Чтобы понять нужно много знаний. Это в ВУЗе изучают, и то не все» — ну да, а че делить то нельзя? До этого момента у нас причинно-следственные связи не нарушались, шли от простого к сложному. А ведь ноль — число как число. Деление — операция как операция. Запрет на ровном месте!

Но система образования не щадит никого (пруф). Нет другого выхода, кроме как идти дальше и осваивать новые знания. В голове происходит “скачок знаний”, как будто тысячелетие эволюции математики было пропущено. И это только начало.

"… не нужно проявлять лишней поспешности, нужно дать время ученику освоиться с тем внутренним переворотом, который в нем совершается в результате акта познания”, — Ф. Клейн, “Элементарная математика с точки зрения высшей”

В старших классах, откуда ни возьмись, появляются формулы окружности и треугольников, дискриминант, тригонометрические тождества и т.п. Что их объединяет? Все они пришли сверху, совершенно неизвестно откуда. Их нужно просто использовать, в худшем случае зазубрить.

Оказавшись в ВУЗе, большинство, вместо возвращения к пропущенному материалу, изучает «вышку» с уклоном в специальность. Объем формул, пришедших свыше, уже совершенно не смущает.

Да, систему образования понять можно. Специалисту платят за результат, а не за то что он знает откуда экспонента в его расчетах.

В итоге мы не приходим к выводам, так как это делают математики. В момент “скачка знаний”, то есть когда мы отбрасываем часть логических цепочек, вершится таинство. Мы принимаем на веру то что нам говорят. Учебник превращается в священное писание!


Запрет деления на ноль — это первый и самый навязчивый запрет математики. Поэтому он запоминается на всю жизнь. Это так же педагогическая проблема, которая оставляет отпечаток на всю математику, как на “тайну покрытую мраком”. Это сложная проблема, по сравнению с ней найти большинство пропущенных логических цепочек не составляет труда.

Превратить священное писание назад в учебник можно. Причина запрета должна стать строго определенной. Задача педагогов преподнести ее ясно. Наука не должна сеять сомнения.

2.2 Что такое деление?


Капитан Очевидность утверждает, чтобы поделить на ноль нужно знать что такое деление и что такое ноль. Как ни печально, гугл подсказывает, что многие адепты “магии деления на ноль” не проходят даже первый круг этого ада. А именно понять что они собираются сделать и с чем. Заглянем в Википедию:
Деле́ние (операция деления) — одно из четырёх простейших арифметических действий, обратное умножению. Деление — это такая операция, которая считает сколько раз одно содержится в другом.
Что из этого следует:
  • Деление не самостоятельная операция. Она определяется через умножение. Если посмотреть на определение умножения, то оно определяется через сложение. Вычитание так же определено через сложение. Сложение самостоятельно и ни от кого не зависит.

  • В определении нет упоминания о нуле. При повсеместном запрете деления на ноль это весьма странно. Кстати, упоминания нуля нет и в определениях остальных арифметических операций.

  • Вторая часть определения не является частью определения, это всего лишь пояснение. Убедиться можно сравнив с аналогами в других проверенных источниках.


Похоже, самое полезное, что мы здесь нашли — это связь между операциями. Можно сказать что деление — вино третьего отжима, умножение и вычитание — второго, а сложение — первого. Возможно, именно по этой причине деление стало давать сбой при работе с нулем.

2.3 Порождающие операции


Итак, только операция сложения содержит правило о том, как по двум исходным аргументам (слагаемым) определить результат операции (сумму). Все остальные арифметические операции используют данное правило (соответствие чисел), но вдобавок накладывают свои “дополнительные условия”.


В зависимости от “дополнительных условий” арифметические операции можно поделить на прямые и обратные:
  1. Прямые операции: это сложение, умножение и возведение в степень. Выражая эти операции через сложение, все слагаемые остаются известны. Определение результата любой из операций не представляет сложностей.


  2. Обратные операции: вычитание, деление, взятие корня (логарифмирование). Данные операции берут за основу соответствующую прямую операцию и “инвертируют” ее. Таким образом, выражая операцию через сложение, хотя бы одно из слагаемых оказывается неизвестно. Это слагаемое и есть результат операции. Сумма, как правило, известна.


    Определение результата операции, в общем случае, задача не тривиальная.


Все прямые операции обладают одним свойством. Они являются замкнутыми. То есть тип результата полностью определяется типами входных чисел (невозможно получить из произведения двух целых чисел дробный результат).

Обратные операции являются замкнутыми только частично (значение корня из целого числа может оказаться целым числом, а может и не оказаться). В тех случаях, где подобрать результат не удается операция оказывается не определена. Данную проблему издавна решают простым способом: рассматривают получившуюся запись операции и числа как новый тип чисел: .

Таким образом, можно сказать что обратные операции и “порождают” новые типы чисел.

Математическим языком:
В общем случае использование термина “обратная операция” неприемлемо для обозначения способности операции порождать новые типы чисел. Например, “дополнительными условиями” можно:
  • поместить результат операции в одно или несколько слагаемых (как показано на примере выше);
  • определить результат операции как ответ на вопрос, сколько слагаемых участвовало в операции (дробные числа, иррациональные числа использующие корень);
  • определить результат операции как сумму бесконечного количества слагаемых. При этом все слагаемые известны (число Пи и число Эйлера).
Деление одна из порождающих операций. Возможно, в процессе рождения что-то пошло не так и новорожденный получил травму. Для того чтобы ответить на это вопрос нужно понять откуда взялось деление и откуда взялся ноль.

2.4 Эволюция арифметики


Попробуем структурировать наше представление об арифметических операциях и порождаемых ими типах чисел. Для наглядности представим один из вариантов, как может идти эволюция арифметики.

2.4.1 Область определения


Мы в пещере. С умением считать никто не родился. Однако в процессе “созерцания” появилось понимание, что такое понятие “количество”. То есть мы знаем что два мамонта и два яблока имеют нечто общее и можем это выразить, загибая пальцы. Соответственно ничего, кроме натуральных чисел на этом этапе мы не знаем.


Множество натуральных чисел помечено звездочкой “*” для однозначности. Здесь и далее подчеркивается отсутствие понятия “ноль”.

Есть несколько формальных определений последовательности натуральных чисел. Мы возьмем за основу аксиомы Пеано. Примечательно что эти определения не были описаны древними. Они появились только в 19 веке, а после прошли процедуру уточнения (в первоначальном варианте их было девять, в современном виде уже пять).

Рассмотрим формальные определения и их суть в рамках нашей задачи (традиционное словесное описание можно найти на Википедии):


  1. Есть число “один” и оно натурально.


  2. Вводится функция следования S(x). Для всех натуральных аргументов она возвращает следующее за ним натуральное число. В первом приближении (весьма грубом) это S(x)=x+1, например 2=S(1) и 3=S(S(1)).


  3. Вводится явный запрет на глобальную закольцованность порождаемой последовательности чисел. Генерируя числа мы не можем получить элемент с которого начали генерацию, то есть единицу.


  4. Разные аргументы функции следования должны давать разные результаты. Таким образом вводится явный запрет на локальную закольцованность. То есть функция следования не должна повторно сгенерировать число, которое уже было сгенерировано.


  5. Математическая индукция, позволяющая подняться с уровня элементов последовательности до уровня последовательности в целом. Если какое-то высказывание “P” верно для единицы и для каждой пары соседних элементов, то оно верно и для всех элементов последовательности.

    Например. Для чисел 2 и 3, верно что между ними есть один средний элемент 2.5, для 3 и 4 это 3.5 и т.д. Делаем вывод, между любыми соседними натуральными числами есть средний элемент и он единственный.

Какой вывод можно сделать из этих аксиом? Вводится запрет на закольцованность в любом виде (глобальную или локальную). Запрет на закольцованность всегда требует наличие следующего элемента. Так появляется математическое понятие “бесконечность” основанное на понятии «количество”. Понятие “бесконечность” не может существовать без понятия „количество”.

Математическим языком:

Довольно часто за “стартовый элемент” в аксиомах Пиано берут ноль. Почему так делать нельзя, будет раскрыто при описании операции “вычитание” (уже совсем скоро).

Функция следования не использует операцию сложения в прямом смысле этого слова. Это фундаментальная функция, которая используется как для построения множества натуральных чисел, так и для формального определения операции сложения.

То есть и числа и арифметические операции определены при помощи функции следования.

Функция следования входит в класс примитивно рекурсивных функций, рассматриваемых в теории алгоритмов. Как известно, понятие рекурсия не содержит требования ее конечности (достижимости терминальных ветвей), а значит она так же неявно определяет понятие “бесконечность”.

2.4.2 Сложение


Первая операция, возникшая в ходе нашей эволюции. Как целые пальцы не загибай, результат будет целым. Разве что у вождя сумма пальцев может быть чуть больше чем у всех остальных. Если пальцев не хватает, всегда можно позвать научного ассистента по пещере и расширить разрядную сетку.



2.4.2 Вычитание


В четверг охотники подстрелили 12 мамонтов. За пятницу съели 5 штук. Сколько мамонтов осталось?



Задача хорошо решается путем введения разгибания пальцев. Но подход работает не всегда. Например, чтобы оценить запасы на выходные охотник загибает семь пальцев за остаток, разгибает пять пальцев за субботу (норма расхода в день) и “пытается” разжать за воскресенье.



В этот момент между “try” и “catch” возникает ArithmeticException. Результат оказывается не определен. Наша операция определена только для случая, когда уменьшаемое больше вычитаемого.


Однако определение вычитания не накладывает никаких ограничений. Чтобы избавиться от требования “a > b” введем “правило перестановки”. То есть позволим менять местами уменьшаемое и вычитаемое. Но чтобы тождество оставалось верным результат нужно пометить каким-то маркером, например знаком “минус”. Всякие маркеры для математики — дело обычное (например, признак отсутствия нуля у ).



За счет вспомогательной операции “перестановки” мы подошли к первой абстракции — “отрицательные числа”. Пометка в виде знака “минус” у натурального числа есть ничто иное как признак отложенного вычитания (но это только пока).


У нас остался всего один не определенный случай, когда уменьшаемое и вычитаемое равны. Если мы захотим определить его, то нам придется ответить на вопрос что такое понятие “ничто”. Хотя к чему все эти сложности, обозначим “ничто” символом “0” (позже вникнем по полной).


Осталось зафиксировать наше решение в виде “правил сложения/вычитания нуля”. Они следуют из определения нуля после пары нехитрых перестановок:


Посмотрим, насколько хорошо работают введенные правила. Решая уравнения, мы по двум известным числам всегда можем найти неизвестное третье. Совершенно неважно в какой части уравнения оно стоит, решение всегда однозначно.


Отрицательные числа появились в результате перестановки, ноль же заполнил “ничто”. Отрицательные числа и ноль рождены разными способами. Далее мы будем рассматривать две ветви эволюции: отдельно всех чисел без нуля и отдельно ноль.

2.4.3 Умножение


Умножение по определению является сокращенной записью сложения. Умножая натуральные числа, результат может быть только натуральным. На этом этапе эволюции для нас польза от определения заканчивается.


Для отрицательных чисел в определении нет ни слова о том как их перемножать. Эти правила сформировались постепенно в ходе решения прикладных задач. В современной трактовке они известны как дополнение к умножению в виде “правил знаков”. Они определены настолько хорошо, что применяя их к целым не нулевым числам, операция остается замкнутой.


В случае нуля ситуация отличается кардинально. Вводится еще одно правило “правило умножения нуля“ (умножение любого числа на ноль дает ноль). Но новым это правило только кажется. Ввести какое либо иное правило мы не можем. Определение умножения жестко связывает нас со сложением. Раскрывая умножение через сложение, мы используем “правила сложения/вычитания нуля”, соответственно ничего кроме нуля мы получить не можем.


Математическим языком:

Если сравнить операции сложения и умножения в арифметике и общей алгебре, то можно заметить одно серьезное различие. В арифметике данные операции связаны по определению. Дистрибутивный закон является следствием этих определений. В общей алгебре наоборот, операции описываются независимо друг от друга, а уже в определении поля (кольца, если говорить точнее) связываются дистрибутивным законом. Как следствие:
  • В определении поля есть требование к обратному элементу. При этом для умножения и для сложения требование описано не симметрично. Допускается отсутствие обратного элемента по умножению для нейтральных элементов по сложению, но не наоборот.
  • Для придания симметрии при описании колес пришлось отказаться от привычного дистрибутивного закона, а значит и от оперирования полем.
Поле, венец универсальности, “за уши” притянуто к элементарной арифметике. Но чтобы избавиться от этой подпорки (описать требования к операциям симметрично) придется расширить определение дистрибутивного закона (начиная с кольца конечно). Есть основания полагать, что венцом универсальности может стать другая алгебраическая система, для которой поле окажется частным случаем.

2.4.4 Деление


Деление — операция обратная умножению. В уравнениях с положительными и отрицательными числами появляется возможность подстановки не кратных чисел.


Как следствие операция порождает “рациональные числа”.


Чтобы вписать их в арифметику, в комплекте идут “правила действий с обыкновенными дробями”. К счастью, эти правила гармонично сосуществуют с введенными нами ранее “правилами знаков”. В итоге в уравнениях сохраняется возможность определить по двум известным числам неизвестное при любой расстановке.


В случае нуля его можно умножать на рациональные числа. На этом всё, гармония закончилась! Только для двух из трех видов уравнений с произвольными числами решение может быть найдено.



Во-первых, появилась возможность составить уравнение с настолько не удобными числами, что мы не сможем подобрать ни одного решения. Решение “не возможно”.


Во-вторых, появилась возможность составить уравнение в котором есть бесконечное множество решений. Выбрать какое-то одно из них так же невозможно. Решение “не однозначно”.


Несложно догадаться, корень проблемы деления на ноль лежит в “невозможности” и “неоднозначности” умножения нуля. Умножение, в свою очередь, ретранслирует “правила сложения/вычитания нуля”. По сути можно задать уравнения, обладающие такими же свойствами, используя только сложение.


В обоих уравнениях нужно определить количество нулей, которые нужно сложить чтобы получить произвольное число или ноль.
Деление не привнесло чего-то качественно нового. Произошла трансформация “невозможности” и “неоднозначности” сложения в конкретные сущности, в неопределенности вида 1/0 и 0/0 соответственно.


Получается что деление, как первый подозреваемый, не виновато в том что на ноль делить нельзя.


Пока не существует понятия “ноль” все операции, включая возведение в степень и взятие корня (логарифмирование), хорошо замкнуты (уже правда на комплексных числах) и арифметика работает великолепно. Но есть одно “но”, при такой конфигурации арифметики операция вычитания, оказывается определена не полностью.

После введения нуля сложение и вычитание неплохо работает. Для остальных операций он скорее повод для установки костылей (), нежели равноправное число.

2.5 Что такое ноль?


Итак, раз операция деления оказалась не виновата в запрете деления на ноль. Попробуем тогда собрать воедино все, что мы знаем о нуле:
  1. Потребность в нуле появилась при определении операции вычитания.

  2. Для разрешения большей части неопределенностей вычитания было введено “правило перестановки”. Знак минус перед числом, по сути, является маркером “отложенного вычитания”. Все что “правило перестановки” не осилило, закрыл собой ноль. По сути, ноль был введен для обозначения понятия “ничто”.
    В предыдущей части статьи (при проективном расширении числовой прямой) мы “с потолка” ввели беззнаковую бесконечность. Ноль, аналогичная “затычка” для всего, что нам не понятно. Последствия, в виде появления новых неопределенностей, оказываются весьма предсказуемы.

  3. У понятия “ничто”, отсутствует связь с понятием “количество” (основа для определения натуральных чисел и сложения). Эти понятия существуют сами по себе и мы можем “созерцать” их совершенно независимо, например “пять яблок” и “вакуум”. Отсюда следует, что в своей сути ноль так же не связан с натуральными числами, как понятие “ничто” не связанно с понятием “количество”.

Вычитание использует данное понятие, но не порождает его.

    Отсутствие породившей операции качественно отличает ноль от всех остальных чисел.



    Для того, чтобы была ясна связь не рассмотренных нами типов чисел с операциями, продолжим, максимально кратко, тему эволюции. Мы остановились на делении. Комплексные числа и часть иррациональных порождаются операцией взятия корня (логарифмированием) над отрицательным числом. Прочие иррациональные (число Пи и число Эйлера) появляются за счет введения бесконечных сумм и бесконечных умножений. Мнимые единицы кватернионов даны по определению и не выведены арифметически. Соответственно, инородны в рамках эволюции чисел.

  4. Вероятно именно из-за возможности одновременного “созерцания” понятия “ничто” и понятия “количество” ноль иногда приписывают к натуральным числам. Однако гораздо более логичным видится вынесение нуля как минимум в отдельный тип чисел.

  5. Было принято, что ноль единый и абсолютный. Именно из этого, весьма спорного, предположения следуют “правила сложения/вычитания нуля” с другими числами. Как следствие, ноль обладает уникальным свойством, которое отсутствует у всех остальных чисел. В результате сложения нуля с произвольным числом неизвестно, сколько нулей участвовало в операции и были ли они вообще.

На последнем пункте стоит остановиться поподробнее. Попробуем представить не абсолютный ноль.

Допустим, у нас есть мамонт. Для его перевозки нужна тара. Если положить мамонта в тару, а потом вытащить, то в таре окажется “ничто” (прям как на картинке со спичкой выше). Однако тара для двух мамонтов несколько отличается от тары для одного. В случае кражи есть основание выставлять обвинение в соответствии с размером оставшейся тары. А значит, существуют ситуации когда одно “ничто” другому “ничто” рознь.


Может ли “ничто” быть разным или “ничто” есть единая и абсолютная сущность? Это вопрос на который невозможно дать ответ. Аналогичен и бессмысленен спор на тему есть ли Бог, а и есть то единый он или их много. Ответа на этом свете мы не узнаем.

Математическим языком:

Отношение математики к нулю как к единому и абсолютному объекту лучше описать по отдельным разделам математики:
  1. Общая алгебра. В алгебраических системах с разрешенным делением на ноль, очень ярко проявляется борьба с абсолютным нулем. Причудливые операции вычитания это не прихоть, а следствие уничтожения единого и абсолютного нуля. Например, в колесах для вычитания определено следующее тождество:


  2. Математическая логика. Формально арифметика определяется расширением аксиом Пеано. Пять аксиом, определяющие ряд натуральных чисел, дополняются еще четырьмя. Это расширение определяет связь базовых арифметических операций (сложение и умножение) с числами:
    В этих аксиомах заложено особое отношение к нулю. Формально определяется объект со свойствами отличными от всех остальных чисел. Этому объекту посвящено две из девяти аксиом описывающих всю арифметику.
    Здесь мы прикасаемся к одному из проявлений теоремы Гёделя о неполноте. Невозможно средствами арифметики доказать или опровергнуть единую или множественную сущность нуля.

  3. Теория алгоритмов. Можно заглянуть в арифметику еще глубже. Для построения последовательности натуральных чисел и определения операции сложения, используется класс примитивно рекурсивных функций. Функция следования S(x), используемся в аксиомах Пеано, одна из них. Наравне с ней определена Нулевая функция O(x), функция которая всегда возвращает ноль.
Таким образом, на самом дне арифметики, там где не существует ни натуральных чисел, ни сложения (а значит и прочих операций), существует ноль.


Хорошо, ответа на вопрос сколько должно быть нулей арифметика дать не может. Мы пользуемся одним нулем. В колесах, рассмотренных в первой части, использовалась арифметика с бесконечным количеством нулей. А может ли быть конечное число нулей, но больше одного.

Может и такие арифметики успешно используются. Один из ярких примеров арифметика со “знаковым нулем”, реализованная в JavaScript.

Математическим языком:

Знаковый ноль, хоть записывается аналогично +0 и -0, не имеет ничего общего с исчислением бесконечно малых.

Введение знакового нуля является еще одним вариантом расширения числовой прямой. В общей топологии существует очень близкое (но не тождественное) пространство “линия с двумя началами” (не хаусдорфово).
Однако и эта арифметика грешит неопределенностями.

Пример работы JavaScript
console.log(+0) => 0
console.log(-0) => -0
console.log(-0 === +0) => true

console.log(0-0)   => 0
console.log(-0-0)  => -0
console.log(0/0)   => NaN
console.log(-0/0)  => NaN
console.log(-0/-0) => NaN

console.log(Infinity/Infinity)   => NaN
console.log(-Infinity/Infinity)  => NaN
console.log(-Infinity/-Infinity) => NaN
console.log(Infinity — Infinity) => NaN
console.log(Infinity + Infinity) => Infinity

Можно сделать вывод, что неопределенности в арифметике будут сохраняться до тех пор, пока количество нулей конечно.

По большому счету неважно как мы будем относиться к нулю. Нужен ли нам единый и абсолютный ноль, а может парочка или вообще бесконечное количество, арифметика всегда сможет под нас подстроиться.



2.6 Бесконечность наше всё


Напоследок, хотелось бы представить хотя бы один вариант числовой оси содержащей бесконечное количество нулей (данный пример описывает концепцию и не претендует на математическую строгость).

Для вычитания, когда уменьшаемое и вычитаемое равны, вместо ввода нуля определим операцию “сокращения”. То есть разрешаем вычеркивать эквивалентные выражения с противоположным знаком. Но если мы сократили все, то результат уже не пригоден к дальнейшему использованию.


Отсчет в числовой оси начнем с единицы (от первого числа зародившего понятие “количество”). Для генерации остальных чисел воспользуемся бесконечной последовательностью, определенной функцией следования (она же использована в аксиомах Пеано). Это будет наш эталонный генератор бесконечной последовательности.

Чтобы получить очень маленькое число при помощи функции следования нужно затратить столько же сил сколько и на генерацию очень большого. Используем функции f(x)=1/x и f(x)=x. Приводить в десятичный вид рациональную дробь задача не стоит, соответственно вычислительная сложность функций одинакова.

Так как ни “абсолютный ноль“ (отмечен символом ноль), ни »потенциальная бесконечность" (отмечена символом беззнаковой бесконечности) недостижимы, ось растет из единицы бесконечно в обоих направлениях (масштаб неравномерный).


При определении вычитания определено “правило перестановки”. Мы же, в свою очередь, делаем копию нашей прямой и отображаем ее зеркально. Числа-близнецы и недостижимые для них пределы помечаем знаком “минус”. Положительная прямая, не соединена с отрицательной. Переход из одной прямой в другую выполняется только за счет “правила перестановки”.


Для наглядности изобразим полученную числовую прямую в виде круга. Так же, как мы делали при проективном расширении. Однако, предельные значения не смыкаем (компактификацию не выполняем). Данная трансформация смысловой нагрузки не несет и выполнена только для улучшения восприятия.


Теперь мы готовы к самому главному. Выполним переход от единой потенциальной бесконечности к бесконечному множеству актуальных бесконечностей (аналогичный подход используется в нестандартном анализе).

Будем относится к бесконечно большим величинам как к полноправным числам. За эталонную актуальную бесконечность возьмем “скорость” с которой функция следования достигает любого произвольного числа. Обозначим это число . Не стоит его путать с потенциальной бесконечностью , она все так же недостижима.

Для получения различных актуальных бесконечностей будем использовать понятие предела функции при стремлении к числу . Мы не будем отбрасывать бесконечно малые (низшего порядка) и не будем поглощать константы бесконечно большими величинами, как это принято в классическом анализе. Мы будем сохранять всю информацию, составляющую число. Соответственно, у нас появляется возможность сравнения бесконечно больших чисел.


Возводя число в отрицательные степени, мы получаем бесконечно малые числа. По сути это и есть наше бесконечное множество нулей, которые можно сравнить между собой и использовать в арифметике (в отличие от бесконечно малой величины в классическом анализе).

Математическим языком:
С точки зрения общей алгебры, наша алгебраическая система, не является полем, так как отсутствует ноль (нейтральный элемент). Нестандартный анализ оперирует аналогичными актуальными бесконечностями, они называются гиперреальными числами. Ноль (нейтральный элемент) является одним из гиперреальных чисел. Соответственно алгебраическая система нестандартного анализа оперирует полем.

Наша эталонная бесконечность представляет собой одно из чисел нестандартного анализа. Однако, вместо упрощенного понятия “скорость”, в нестандартном анализе числами являются классы эквивалентности бесконечных последовательностей. Так как в нашем концепте все алгебраические операции можно выразить через функцию следования, значит любую актуальную бесконечность, образованную арифметически, можно выразить через .

По факту пределы практически перестают упрощаться, в том виде к которому мы привыкли. Сейчас мы просто производим замену переменной на . Правило Лопиталя так же не применимо. В первой части было показано как в классике, при определении производной, отбрасывается бесконечно малая величина. Однако стоит отметить, понятие предела в нестандартном анализе все же существует, но определено несколько шире.

Если возникнет практическая необходимость, можно определить операцию вычитания и для равных чисел (вместо “сокращения” определенного нами выше). Например, это может быть число низшего порядка, нежели исходные числа (аналог уравнения из колеса). Арифметика окажется замкнутой. Но нужно отдавать себе отчет, что сумма двух двоек тут же окажется равной четырем с хвостиком. Это чем-то похоже на сложение скоростей в теории относительности. Еще один пример, термодинамика и понятие абсолютного нуля температуры. Остановив молекулы, атомы продолжают движение. Остановив атомы, кварки все еще двигаются и т.д. Погружение бесконечно.

Эпилог


Мы находимся между прошлым и будущим, между микро и макро миром. Во всех областях рано или поздно мы находим предел за который мы не сможем зайти и это нормально.

В математике все не так. Нам говорят что ноль — это число. Затем ставят его в один ряд со всеми остальными числами. Затем нам говорят, длина пути от минус единицы до единицы равна двум. И в этот момент наше сознание окончательно растворяет ноль среди остальных чисел.

Мы не можем делить на ноль, потому что забыли что однажды смешали понятие “ничто” и понятие “количество”.

Полезная литература
Евгений Капи́нос @ekapinos
карма
39,0
рейтинг 0,2
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (57)

  • +3
    Я в Lua столкнулся с бесконечностями и неопределённостями при пребразовании таблиц в компилируемый текст. Я не стал использовать константы а использовал какраз любимые выражения с нулем.

    elseif type(value) == "number" then
    		if (value > 0) and (value < 0) and (value == 0) then -- indeterminate form
    			return "0/0"
    		elseif value == 1/0 then -- infinity
    			return "1/0"
    		elseif value == -1/0 then -- negative infinity
    			return "-1/0"
    		else
    			return tostring(value)
    		end
    • 0
      Что?.. Во всех языках логические операции с неопределенностью всегда ложны, а в lua — истинны?!
      • 0
        ошибочка похоже затесалась.
      • 0
        Спасибо поправил. Операции сравнения действительно все ложны.
        • +2
          Хм. Вроде бы как NaN принято проверять как (value != value), так как NaN не равен ни чему, в том числе и самому себе.
          • 0
            Такой вариант я не догадался проверить.
  • +5
    Потрясающе! Надеюсь, продолжение будет?
    • +2
      Спасибо!
      К моему счастью, тема «деления на ноль» раскрыта по максимуму. Сейчас мне добавить уже нечего. Так что это финал.
      • 0
        Эммм… Как неожиданно: я думал, что будет еще несколько статей, чтобы до конца понять ВООБЩЕ ВСЁ (а теперь придется эти две курить глубже или наконец собраться с силами и осилить серьезный учебник по алгебре). Может быть напишите еще что-нибудь по математике в том же стиле — очень уж интересно читать, особенно про нестандартные (для обывателя) вещи?
        • 0
          А у Вас остались еще вопросы? Я, на полном серьезе, не представляю куда можно развить глубже.

          Хотя тут интересная дискуссия началась. Поднятый там вопрос я в статье не раскрывал. Но похоже мы дискутируем уже не про «деление на ноль», а про «арифметики и с чем их едят».
          • +1
            про «арифметики и с чем их едят»
            Вполне можно раскрыть эту тему «для чайников».
            Тут же весь вопрос в том, что мы зачастую и понятия не имеем, насколько наука ушла за границы привычных понятий и оперирует «запретными» вещами. Тут как с нулем — ну нельзя делить и нельзя, потому что нарушается базовая аксиоматика. Так и остальные вопросы (типа нестандартного анализа и проч.) — мы просто не догадываемся, что там, «за пределами» тоже есть «жизнь». Потому и вопросы не возникают — мы вообще не в курсе про существование этой области знаний. Конечно, для людей со специальным образованием это всё может показаться наивным, но прикоснуться к другим граням математики — это очень и очень интересно, хотя бы для расширения кругозора.
            PS В комментарии выше я имел ввиду больше не собственно про деление на ноль, а как раз раскрытие смежных тем.
            • 0
              Согласен, материал «для чайников» по конкретному вопросу тяжело найти. Есть общие сборники, но там опять же обо всем. Объем большой, разобраться тяжело.

              Как будет вдохновение, можно и другие темы раскрыть :)
  • –8
    Tl;dr

    Исходя из написанного, каков результат деления пяти на ноль?
    • +1
      Очевидно, 5/0 <=> 5 * «1/0».
  • +2
    Спасибо вам!
    • 0
      Рад, что статья оказалась для Вас полезной!
  • 0
    Мне логика знакового нуля до сих пор не понятна, почему так происходит?
    // Если
    0===-0
    true
    // то результаты
    1/-0
    -Infinity
    // и
    1/0
    Infinity
    // должны быть одинаковыми. Разве не так?
    

    В этом случае всё ломает, но чёткого ответа почему так происходит я не нашёл. Может плохо прочитал статью…
    • 0
      Это особенность реализации операции сравнения в стандарте IEEE 754. Арифметика более-менее замкнута относительно нулей. Это не описано в статье, но операция сравнения дана в стандарте «по определению» (пруф). Соответственно, работает уже поверх арифметики.

      Скорее всего принято для чтобы не засорять код проверками на оба нуля, но это лишь мое предположение.
      • 0
        Не совсем так. Просто отличить один ноль от другого можно только в одном случае — когда они записаны в виде константы. Любая арифметическая операция уже не способна дать знаковый ноль, лишь беззнаковый.

        Поэтому к знаковым нулям все же стоит относиться не как к фундаментальной части арифметики, а лишь как к особенности, подозрительно похожей на баг (собственно, знаковый ноль — это и есть баг формата чисел с плавающей запятой, с которым все давно смирились).

        Аналогично и с бесконечностями — после любой арифметической операции над знаменателем полученную в результате вычислений бесконечность уже не следует считать знаковой, ее знак — это просто мусор.

        Почему же они не равны? Потому что бесконечность, полученная в результате вычислений — не очень частый гость. Чаще всего бесконечности следует вообще рассматривать как еще один вариант NaN, фильтруя все скопом функцией isFinite.

        Но, вместе с тем, знаковая бесконечность — дико удобное значение для граничных элементов при сравнениях!
        Я считаю, истинные порождающие операции этих чисел — не деление, а нахождение максимума и минимума:
        console.log(Math.max(), Math.min()); // -Infinity, Infinity
        
        • 0
          В JavaScript есть операция которая возвращает отрицательный ноль.
          console.log(Math.round(-0.5)) // -0
          
          • 0
            Одна? )
            • 0
              console.log(-5 * 0) // -0
              
              • 0
                Опять ноль присутствует в виде константы. Это — не «боевой» сценарий.
                • 0
                  -5*(5-5)…
                  • 0
                    А 5-5 — это какой ноль должен быть — положительный или отрицательный? :)

                    Нет, понятно, что в js будет положительный, какой он должен быть «на самом деле»? И в чем вообще смысл знака у этого нуля?
                    • 0
                      Как определите в своей системе так и будет. Тут нет единственно правильного подхода.
                      • 0
                        Лично я считаю, что вопрос не имеет смысла, и определяю такой ноль как беззнаковый. А тот факт, что в компьютере он все равно представлен знаковым нулем — это уже деталь реализации.

                        Да, можно исхитриться, и определить какую-нибудь расширенную арифметику, где знаки у нуля в подобных ситуациях будут определены. В таком случае часть правил, прописанных в IEEE 754, окажется «в тему». Но я еще не сталкивался с задачами, где бы это пригодилось — ни разу.
  • +3
    Оффтоп
    Верхняя картинка — из 5-минутной короткометражки «Черная дыра». Интересная зарисовка.
  • +9
    В целом, если смотреть на статью с точки зрения задачи популяризации науки читать интересно. Мне текст понравился. Но имея высшее математическое образование очень тяжело его воспринимать. Намерение автора сущности высокой степени абстрактности объяснить просто создало настоящее спагетти из размышлений и выводов, где причина и следствие причудливо меняются местами.

    Для начала, сама проблема с делением на 0 по сути является выдуманной. Точнее она проблема примерно из того же класса, почему уравнение x = SQRT(-1) тоже не разрешимо в рамках школьного курса математики. Или вычитание из меньшего большее в начальной школе.

    Капитан Очевидность утверждает, чтобы поделить на ноль нужно знать что такое деление и что такое ноль.

    Но до этого Кэп должен заинтересоваться, вообще говоря, а что такое число вообще? Что это такое?

    Один из лейтмотивов статьи — это трепанация арифметических операций в основном для привычных нам числел, таких как натуральные, целые, рациональные и т.п. с привлечением вкраплений из АТЧ.

    Замечательный вывод из рассуждений:
    Поле, венец универсальности, “за уши” притянуто к элементарной арифметике.

    Мягко говоря, ставит все с ног на голову.

    Привычные, нам числа и операции в элементарной математике, с т.з. алгебры и теории чисел — это лишь одна из простых моделей элементов абстрактной алгебры. Группы, кольца, поля, тела — имеют под собой стройное аксиоматическое основание, которое разрешает все вышеприведенные вопросы(которые, вообще говоря, там просто не возникают) и с точки зрения понимания сути вещей и с т.з. философии.

    Привычные нам числа и операции очень вторичны по отношению к объектам абстрактной алгебры, которые непротиворечиво описывают куда более широкий класс объектов реального мира на самых разных его масштабах.

    «Мы не можем делить на ноль, потому что забыли что однажды смешали» все свои понятия или просто нам не хватает знаний об устройстве нашего мира.
    • +1
      Конечно общая алгебра может оперировать и числами и цветами и марсианами. К сожалению Вы смешали мои сомнения про значимость «поля из общей алгебры» с значимостью «общей алгебры в целом». Это не так. Поле становится «не достаточно универсально» только в случае отказа от «абсолютного нуля».

      Да, в статье рассматривается частный случай, когда общая алгебра оперирует числами. Если бы «у нас» вопросы не возникали по этому поводу «почему делить нельзя», то этой статьи бы не было. Суть, описана в пункте «2.1 Зачем вообще напрягаться?»

      В общем мы тут о арифметике и делении на ноль, а не об общей алгебре.

      saaivs, может Вы дадите определение числа, которое покроет все случаи? ;) Мне не удалось
      • 0
        С точки зрения арифметики, вы сделали интересную работу. Я уже упомянул, что у меня в изложении диссонанс вызывают как раз лишь элементы алгебры и теории чисел. Точнее даже акцент подачи. Сами упоминания вполне могут быть уместны. А в целом, все весьма интересно и в чем-то познавательно.

        Относительно определения числа — все достаточно просто с позиций АТЧ.
        «число» — в общем случае, это элемент множества(носителя) для заданной алгебраической системы. Выбирая подходящую сигнатуру алгебры мы получаем всю нашу элементарную арифметику.

        т.е. по своей сути числа — это в высшей степени абстрактные понятия, но так получилось в жизни что некоторые из них мы интуитивно понимаем с самых ранних лет и поэтому они нам кажутся весьма простыми, особенно натуральные числа.
        • +2
          Подведем итог:

          создало настоящее спагетти из размышлений и выводов, где причина и следствие причудливо меняются местами
          В какой части статьи?

          Но до этого Кэп должен заинтересоваться, вообще говоря, а что такое число вообще? Что это такое?
          С Вашим определением числа я полностью согласен, «все относительно». Но все же непонятно, к чему этот вопрос и как это может повлиять на ход рассуждений статьи?

          диссонанс вызывают как раз лишь элементы алгебры и теории чисел
          Думаю я ответил предыдущим комментарием.

          Если где наврал, укажите место. Общие фразы приводят только к раздражению
  • +10
    В конце статьи получился примерно такой эффект:
    • 0
      Сова прищурилась что ли?
      • –1
      • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    >> Мы не можем делить на ноль, потому что забыли что однажды смешали понятие “ничто” и понятие “количество”.

    Это наглядно показывают элементарные вычисления на фасоли, которые я приводил в своей августовской статье. Выполнение алгоритма раскидывания кучи фасоли при невыставленном на доске делителе невозможно начать.

    Но Вы раскопали эту тему куда глубже. Браво!
    • +1
      Спасибо!
      Ваша статья так же повлияла на меня лучшим образом.
    • 0
      Хотя… при некотором размышлении, становится ясно, что никакого исключения для «ничто» нет. Ибо «количество» есть частный случай мощности, единица — есть мощность одноэлементного множества, а нуль — пустого.

      Все же, я остаюсь при своем прежнем мнении — причина невозможности делить на ноль коренится в ограничениях, которые накладывает на арифметику фасоль, — т.е. без шуток, — особенностях вычислений в натуральных числах.

      Далее этот факт уже распространяется на все виды традиционных чисел в связи с необходимостью иметь согласованную арифметику при расширении их множества пополнением.
      • 0
        В теории множеств не определена операция деления как таковая (пересечение, разность, дополнение, но не деление). Конечно там никакого исключения нет :). Но арифметические операции и операции на множествах — несколько разные вещи.
  • +3
    Ваши рассуждения имели бы смысл, если бы в современной математике целые числа определялись «как натуральное со знаком или ноль». Сейчас целое число определяется как пара натуральных чисел с точностью до соотношения эквивалетности. Это отношение эквивалентности называет два целых числа (a, b) и (c, d) равными если a + d = b + c. Cложение определяется как (a, b) + (c, d) = (a + c, b + d). Вычитание как (a, b) — (c, d) = (a + d, b + c). Умножение определяется как (a, b) * (c, d) = (a * c + b * d, a * c + b * d). Никаких особых правил для нуля у целых чисел нет.
    • 0
      Да, тут для особого нуля тут места нет. Но похоже Вы привели пример алгебраической системы, очень похожей на элементарную алгебру. Я прям представил, как в первом классе изучают фактормножество целых чисел. Боюсь мы сможем поговорить предметно, когда увидим купюру в (12, 405) $. Но пока у нуля особых правил вагон и маленькая тележка.
    • +1
      Вы, наверное, хотели написать (a, b) * (c, d) = (a * c + b * d, a * d + b * c)?

      PS вот только деление приводит нас к рациональным числам- — и так особые случай с нулем опять проявляется.
      • 0
        Я скорее про то что эта статья про «элементарную алгебру» в чистом виде, а не про ее интерпретацию через общую алгебру. Плюс, мне кажется, Вы описываете какую-то другую алгебраическую систему. Если Вас не затруднит, дайте ссылку на первоисточник.

        Как ни крути, общая алгебра — обобщение элементарной. И даже в общей алгебре ноль остается «особым» элементом для которого допускается отсутствие обратного элемента (для поля). Всем нельзя, нулю можно. А почему? Собственно в этом и смысл рассуждений.
    • 0
      А как отображаются на таким образом заданное множество целых чисел «обычные» натуральные числа?
      То есть, как обозначается целое число 5?
      Кстати, оно эквивалентно натуральному числу 5 или нет?
      • 0
        Число 5 представляется как (6, 1), 10 как (11, 1), и.т.д.
        • 0
          Всё, понял, спасибо.
          Это приблизительно то же, как рациональные вводятся через пары целых.
          1/2 = 2/4 = 3/6 =… и т.д.
      • +1
        То есть, как обозначается целое число 5?

        Целое число 5 обозначается как 5. Точнее, класс эквивалентности целых чисел, в который входят числа (10, 5), (7, 2) и (123, 118) обозначается символом 5.

        Целое число в данной системе — это и есть пара натуральных чисел. А вот привычные нам "1", "2", "-10" — это как раз символы, обозначающие такие вот пары.

        Кстати, оно эквивалентно натуральному числу 5 или нет?
        Опять некорректный вопрос. Отношение эквивалентности может быть задано только между одинаковыми типами чисел. Однако, определенное соответствие между целым числом 5 и натуральным числом 5 есть. Забыл только, как оно называется.
        • 0
          Изоморфизм. Или взаимооднозначное соответствие с сохранением операций.
          На самом деле это, конечно, разные пятерки, но мы говорим что с точки зрения арифметических операций они ведут себя абсолютно одинаковым образом, поэтому они в некотором роде «взаимозаменяемы»
          • 0
            Изоморфизмом оно быть не может, потому что существуют целых числа, не имеющие натуральных «пар». К примеру, отрицательные.
            • 0
              Дак не все, а только подмножество целых чисел.
              Если быть точным, то множество целых неотрицательных чисел изоморфно множеству натуральных
  • –7
    Автор, смотри:
    все числа можно получить из еденицы.
    числа Фибоначчи: 1+1=2, 1+2=3, 2+3=5, 3+5=8 и т.д.
    здесь проявляется правило золотого сечения, по которому всё во вселенной работает. вроде логика понятна, но возникает вопрос — откуда взялась единица?
    логично предположить что 0+0=1, но из школьной программы мы знаем что это не так. понятно что это метафизика, но тема не даёт покоя.
    • +3
      Комментатор, смотри
      • «правило золотого сечения, по которому всё во вселенной работает» — инфа 100%?
      • «логично предположить что 0+0=1» — для меня переход не логичен. Сможете пояснить по подробнее?
  • +2
    Не смог прочувствовать выражение, про «деление не виновато, что на ноль делить нельзя».
    Если мы рассматриваем уравнение a+a+a+a (x раз) = b, то с той же точки зрения, например, неразрешимо уравнение 2+2+… +2 (каков x?)=5.
    Если сжульничать и сказать, что оно разрешимо на множестве рациональных чисел, то придется уточнить «что такое взять двойку 2.5 раза».
    И самый главный аргумент — что за операция «узнать количество слагаемых», через которую мы определяем x? Такой у нас не определено, точнее, неявно определено имено через деление.
    • 0
      Вы все правильно поняли, на определенном этапе «эволюции» (есть сложение, вычитание умножение, деление и целые числа) уравнение 2+2+… +2 =5 — неразрешимо, однако после ввода рациональных дробей (можно ими ограничиться и не вводить множество рациональных) все начинает стыковаться (все три вида уравнений остаются разрешимы для любых ненулевых чисел). Почему «дополнительное условие» именно такое и почему появились именно рациональные дроби я не раскрывал. Тут нет хитрой уловки. Цель не загромождать и так длинную статью.

      Согласен с Вами, без деления «узнать количество слагаемых» операция не существовала. В этом абзаце деление выражено через сложение для того чтобы показать связь меду операциями. Далее не рассматривается операция «сложения» с хитрым «доп.условием», дублирующим деление (шутка с читателем, как Вы не пройдет). Вместо этого рассматривается «ноль» в контексте 2-х операций (сложение и деление). Выделяются «особые свойства» нуля, отличные свойств всех остальных чисел. Затем делается вывод что заложены де-факто они были в сложении.

      Деление «поскребло по дну и взбаламутило воду», но не засорило на дно.
  • +2
    есть закон, не позволяющий делить на ноль. А то получится бесконечность или вообще чёрт знает что.

    — Закон? — переспросил мистер Дворкин. — Это закон штатный или федеральный? Он принят конгрессом? Вы знаете его номер и дату вступления в силу?

    — Нет, но…

    — Мистер Зайтлайн, — снисходительно сказал мистер Дворкин. — Можете не объяснять. Мы с мистером Оркиным и мистером Соркиным разбираемся в законах.

    www.figvam.ca/cloud/msg.php?id=502530
    • –1
      Нам наваливают правила с детства, а потом говорят что по ним жить хорошо. Самое интересное, что многие даже не сомневаются :)
      А выходит как-то так

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.