0. Введение

Прошла статья ( Михаил Елисейкин «Революция вайб-кодинга отменяется» - https://habr.com/ru/articles/938440/ ) взорвала чарты и вышла в топы Хабра, а такое часто сопровождается бурным обсуждением, с уходом в оффтопик. И вот там в обсуждении выплыла тема «ноль чётное число или нет?», в которой ответ на вопрос не особо то и нужен, но вот сама тема, является отличной иллюстрацией проблем «верификационизма», как парадигмы научного познания.

1. А есть ли проблема?

Как я уже сказал, ответ на этот вопрос не особо нужен, если вы прямо сейчас не сдаёте ЕГЭ. но и там этой проблемы нет — при ЕГЭ важно не то, правильный ответ или нет, а то, сочтёт ли система ваш ответ правильным. Поэтому, смело отвечаете «ноль является чётным числом». По факту, у нас есть определение «если число делится на 2 нацело, то оно чётное», и для ответа на вопрос ЕГЭ о чётности нуля этого более чем достаточно.

А вот в плане философии научного познания возникает сложность — чётность нуля соответствует основному определению, то есть «верифицируема», но не проходит проверку вопросом «а что если нет?». Сейчас мы не будем обсуждать, является ли этот вопрос «фальсифицируемостью» и до какой ступеньки пост-пост-...-пост-позитивизма мы добрались, потому что вопрос «а что если нет?» является сугубо утилитарным, особенно на Хабре, ресурсе посвящённом программной реализации логики и проверки разных цифровых сущностей на наличие или отсутствие у них тех или иных свойств.

Ведь может же быть так, что программист написал проверку на принадлежность сущности к множеству, а она не работает в режиме «все сущности множества и только они». Ну, чего-то не учёл или произошёл какой-то сбой.

Например, проверка подтвердила, что «серое животное, с четырьмя ногами, одним хвостом и одной головой» является «собакой», а в свойстве «масса» написано «6 тонн». Дальше идём проверять, правильно ли у нас прописаны условия, и не произошла ли у нас проблема с форматом записи «6,000 кг», обработанном системой как «6 тысяч килограмм». А то ведь, не смотря на соответствие условиям, наша «собака» может оказаться «слоном».

Ну или, например, мы заходим в комнату и видим часы, стрелки которых показывают 8 часов 17 минут. Смотрим на смартфон и видим там то же самое время. Казалось бы, мы валидировали стрелочные часы и убедились в том, что они нормально работают.

Проблема в том, что часы могут «стоять» и всё время показывать 8 часов 17 минут, и лишь случайно эти показания совпали с реальностью именно в момент проверки. Поэтому, мы говорим себе «а что если нет?» и кроме метода «в момент проверки время совпало с эталонным» изучаем свойства исследуемых часов и проверяем, соответствуют ли они тому, что из себя должны представлять такие объекты.

- они прямо сейчас тикают.
- 17 минут назад они пробили 8 часов
- если подождать пару минут, то стрелки сдвинутся
- там есть секундная стрелка, движение которой сразу заметно

И это я ещё не поднял вопрос о том, что на смартфоне мы видим не часы, а статичную картинку.

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

Проверяем.

2. Проверка умножением

Возьмём в качестве примера ровное число 16 и посмотрим на его чётность.

16/2=8 — чётное

В текстовом виде это можно сформулировать как «16 это 2 раза по 8», что значит «16 это ДВА, И ТОЛЬКО ДВА, раза по 8». То есть, мы можем гарантировано и однозначно собрать 16 (ДЕЛИМОЕ) из 8 (ЧАСТНОЕ) в количестве 2 (ДЕЛИТЕЛЬ).

А что если нет?

Меняем 2 на другие числа.

1*8=8 — неверно
2*8=16 - верно
3*8=24 - неверно

Таким образом, мы подтвердили, что делили 16 именно 2, а не на какое-то другое число. ТО есть, наше изначальное вычисление не было неверным.

Проверяем 0 (ноль) на чётность.

0/2=0

А что если нет?

Меняем 2 на другие числа.

1*0=0 - верно
2*0=0 - верно
3*0=0 - верно

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

Это значит, что проверки у нас нет и мы не можем подтвердить, что наше изначальное деление 0 на 2 дало однозначный верный результат.

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

3. Проверка делением

Мы можем легко записать формулу a/b=c в виде a/c=b , и при этом равенство будет оставаться верным . На этой возможности держится если не вся математика, то уж точно та её часть, в которой поднимается вопрос о чётности нуля.

Чтобы было понятней, напишу так

Дано: A/x=B . Найдите «x». Ответ: A/B=x .

Что нам даёт тождественность этих записей?

Если оба выражения одинаково верны, то, не зная верность первого выражения, мы можем проверить верность второго.

Пробуем с 16.

16/2=8 - А что если нет?

вжух

16/8=2 — верно

Оба выражения верны.

Пробуем с 0 (ноль)

0/2=0 - А что если нет?

вжух

0/0=2 - … неизвестно

У нас снова нет возможности использовать этот способ для проверки того, действительно ли верно выражение 0/2=0.

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

4. Проверка чётного нечётным - 1

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

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

Речь вот про это:
(чётное)*(нечётное)=(чётное)
(нечётное)*(нечётное)=(нечётное)

Эти свойства легко использовать в проверке по методу А что если нет?

Рассмотрим числа: 16,15,1,0 и представим, что не можем определить их чётность/нечётность очевидным способом. Всех остальных можем, а этих не получается.

Делаем манёвр и заходим с неочевидной стороны.

Берём число 3(три) в качестве второго сомножителя в указанных выше формулах и проверяем.

16*3=48 — результат чётный, значит тестируемое число чётное
15*3=45 — результат нечётный, значит тестируемое число нечётное
1*3=3 — результат нечётный, значит тестируемое число нечётное

Пока всё верно, да?

Переходим к 0 (ноль)

0*3=0 — результат… неизвестный, потому что на выходе у нас ровно то же самое число 0(ноль), для которого мы, по условиям, не умеем определять чётность/нечётность. Проверка не работает.

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

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

5. Проверка чётного нечётным — 2

Так как проверка на чётность это проверка делением, то можно использовать свойства с делением.

(Кстати, если Вам покажется, что деление из раздела «5. Проверка чётного нечётным — 2» является инвариантом умножения из раздела «4. Проверка чётного нечётным — 1», то Вам не кажется. Это, действительно, разные записи одного равенства. Именно об этом и шла речь в разделе «3. Проверка делением».)

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

(чётное)/(нечётное) => если целое число, то (чётное)
(нечётное)/(нечётное) => если целое число, то (нечётное)

Используем числа из предыдущего раздела 48, 35 (что добру пропадать) и 0(ноль), и вновь представляем, что не можем определить их чётность/нечётность очевидным способом. Всех остальных можем, а этих не получается.

В качестве делителя используем всё то же число 3(три).

48/3=16 — результат чётный, значит тестируемое число чётное
45/3=15 — результат нечётный, значит тестируемое число нечётное

Снова работает!

Переходим к 0 (ноль)

0/3=0 — результат… неизвестный, потому что на выходе у нас ровно то же самое число 0(ноль), для которого мы, по условиям, не умеем определять чётность/нечётность. Проверка не работает.

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

6. Ну давай уже, вещай истину

Вещаемая же истина будет скучной.

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

Не «давать противоположный результат», а « не давать никакого результата, но давать иллюзию подтверждения». Как те самые «стоящие» стрелочные часы, на которые мы посмотрели в тот самый момент, когда время на них совпало с реальным.

А ещё это отличный пример того, что две, казалось бы, равнозначные истины могут иметь разную степень обоснованности и подтверждённости. И 16 и 0(ноль) одинаково успешно проходят основную проверку делением на 2, но 0(ноль) не проходит часть дополнительных проверок, которые проходит 16.

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

А чётность нуля? Да вообще пофиг!

Михаил Елисейкин
2025-08-25

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


  1. Dair_Targ
    25.08.2025 05:51

    Как прекрасен бывает мир, если не знать математику (и физику).

    Во-раз: дайте определения (читай задайте аксиоматику) чётности, а главное - чисел, над которыми работаем. Например, берём ZFR для чисел и уже п.3 ломается, т.к. мы уже не можем легко записать формулу a/b=c в виде a/c=b.

    А дальше то, что Вы делаете фактически - вводите какие-то разные определения чётности и доказываете, что они друг другу либо эквивалентны, либо нет.

    Итого: современная математика непосредственную тему чётности, а так же почему вообще такие вопросы возникают и как с ними работать, разобрала вдоль и поперёк. Просто нужно пойти и почитать скучные учебники для ВУЗов.


    1. muxa_ru Автор
      25.08.2025 05:51

      Как прекрасен бывает мир, если не знать математику (и физику).

      Слышали что-нибудь про "доказательство от противного" и "проверочный расчёт"?

      вводите какие-то разные определения чётности

      Не "ввожу", а "беру".

      Не "определения", а "свойства".

      Не "доказываю", а "использую".

      Просто нужно пойти и почитать скучные учебники для ВУЗов.

      Там нет ничего противоречащего написанному мной.

      Если найдёте - покажите две цитаты (мою и из учебника).

      З.Ы. Кстати, кроме школьного "доказательства от противного" и вузовского "проверочного расчёта", есть ещё один полезный приём.

      Если Вам хочется использовать красивые фразочки из борьбы с лженаукой и мрекобесием, или просто возникло ощущение, что Вы прям на 100% правы, то надо сразу же останавливаться и целенаправленно идти искать собственную неправоту.


  1. Andy_U
    25.08.2025 05:51

    Четное число, это такое, что может быть представлено формулой 2 x N, где N - произвольное целое. Остальные - нечетные. Т.е. пользуйтесь правильным определением.


    1. x4x7
      25.08.2025 05:51

      Что значит правильное определение?

      По вашему определению "Пи" - нечетное, по другому более многословному "Пи" не является ни четным, ни нечетным. Вот у нас два определения одного и того же, ведущие к разным выводам. Как определить какое из них правильное?


      1. Andy_U
        25.08.2025 05:51

        По вашему определению "Пи" - нечетное,

        Ну, да. Надо было написать, все остальные целые.


      1. Abstraction
        25.08.2025 05:51

        Что значит правильное определение?

        Значит "та расшифровка слова, которую использующая этот язык группа людей считывает по умолчанию". Да, это звучит размыто. Но практически, в отношении "чётного"/"нечётного" консенсус вполне определён, если кто-то честно не знает и хочет узнать, его узнать не так сложно (можно начать с Вики).


        1. muxa_ru Автор
          25.08.2025 05:51

          По Вашей ссылке есть вот это.

          Интересно тут два момента.

          1) В разделе "Арифметика" есть те самые свойства, которые я использовал.

          2) Кроме определения, не попавшего в скриншот, есть какие-то "Признаки чётности".

          То есть, по Вашей же ссылке видно, вопрос чётности не ограничивается определением "делится на 2 без остатка".


          1. Abstraction
            25.08.2025 05:51

            Я даже хотел взять какой-нибудь учебник по алгебре вместо Вики, но на его страницу затруднительно дать ссылку. My bad. Вики (как и любая энциклопедия) полезна чтобы подсмотреть одно определение в области которую вы в целом знаете, но не чтобы выучить что-то с нуля.

            Есть целые числа, Z. (Можно ограничится только натуральными, N.)

            Мы договорились для a,b ∈ Z, b≠0 под фразой "a делится на b" понимать "∃ k ∈ Z : a = k*b". Мы договорились под фразой "a - чётное" понимать "a делится на 2". Мы договорились под фразой "a - нечётное" понимать "неверно что a делится на 2"

            Из этого определения следуют свойства, вроде того что x*y делится на b если и только если x делится на b либо y делится на b. Или что a делится на 5 если его десятичная запись заканчивается на 5. Или что сумма двух равных друг другу чисел всегда чётная.

            Если у вас на руках число n, и вы хотите понять, чётное ли оно, вам необходимо и достаточно показать соответствие определению. В данном случае n=0 это тривиально: "∃ k=0 ∈ Z : n = k*2". Всё.

            Вы можете вместо прямого определения использовать какие-то ранее доказанные свойства (к примеру, заметить что 0 = 0+0), но следует соблюдать минимальную аккуратность - скажем, десятичная запись числа 30 не заканчивается на 5, но 30, тем не менее, делится на 5: "∃ k=6 ∈ Z : 30 = k*5". То что конкретное свойство не помогло вам ответить на вопрос о соответствии определению - не признак какой-то глубокой истины, это просто означает что вы выбрали неудачное для вашей задачи свойство.


            1. muxa_ru Автор
              25.08.2025 05:51

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

              Скажите, если не секрет, что, по Вашему, я имел в виду на самом деле.

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

              И приведённые мной примеры, идеально выбраны для этой задачи.

              По всей видимости, Вы в это не верите, и считаете, что у меня есть какая-то иная мотивация, связанная именно с теоретической математикой.

              Так что именно я, на самом деле, по Вашему мнению, имел в виду?


              1. Abstraction
                25.08.2025 05:51

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

                Вы решили проиллюстрировать это математикой - я отвечаю на уровне математики.

                На уровне практических задач, что характерно, будет то же самое. Валидно ли писать *reinterpret_cast<std::atomic<int>*>(&val) = 42;? Если идти от правил языка, то ответ "конечно же нет, точка". А если считать что "практическая перепроверка" может быть использована вместо строгих рассуждений, то с одной стороны так нельзя, но с другой у Пети всё правильно работает, проверка не доказала невалидности, так что идея Васи "давайте срочно перепишем этот код" имеет "меньшую степень обоснованности"©.

                Если вы хотели показать что-де существуют ситуации, когда правильный ответ по-прежнему совершенно недвусмысленный, но вот ваши эвристики проверки этого ответа могут дать сбой, то даю обратную связь: эту идею из текста лично я не считываю. Вместо этого я читаю нечто вроде "есть правила "для ЕГЭ", а вот если разбираться как на самом деле и делать разные проверки, то уже не так и бесспорно что 0 - чётное".


                1. muxa_ru Автор
                  25.08.2025 05:51

                  А если считать что "практическая перепроверка" может быть использована вместо строгих рассуждений, то с одной стороны так нельзя

                  "может быть", предполагает, что Вы сам можете выбирать вариант, а это иллюзия.

                  Жизнь - дерьмо.
                  Люди- идиоты.
                  Ошибки - неизбежны.
                  Строгие вычисления есть лишь в мечтах.

                  Поэтому, постановка СОБСТВЕННОГО результата под сомнение и поиск методов, позволяющих перепроверить самого себя, является обязательной, и её проведение зависит не от того, хотите Вы строгое рассуждение или нет, а от того, окупится ли эта перепроверка ресурсно/экономически. Например, если я готов дома выкинуть половину купленной картошки, то мне не обязательно делать в магазине строгую проверку качества.

                  Вот такой выбор есть. А выбора "строгие рассуждения" нет.

                  Если вы хотели показать что-де существуют ситуации, когда правильный ответ по-прежнему совершенно недвусмысленный

                  Я сказал именно то что хотел - что правильность этого ответа совершенно не важна.

                  Вместо этого я читаю нечто вроде "есть правила "для ЕГЭ", а вот если разбираться как на самом деле и делать разные проверки, то уже не так и бесспорно что 0 - чётное".

                  Слово "читаю" предполагает, что это было написано. Если у меня не написано того, что Вы якобы читаете, то Вы не читаете, а выдумываете.

                  И в этом ещё одна польза от подобных примеров. Они высвечивают проблему с тем, что люди видят чётко и однозначно написанный текст, но им хочется поспорить и они начинают додумывать за автора.

                  И проблема тут в том, что сторонний наблюдатель может не понять происходящее и решить, что то, с чем спорит читатель, действительно было написано или, хотя бы, подразумевалось в обсуждаемом тексте


                  1. Abstraction
                    25.08.2025 05:51

                    Слово "читаю" предполагает, что это было написано. Если у меня не написано того, что Вы якобы читаете, то Вы не читаете, а выдумываете.

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

                    Вот такой выбор есть. А выбора "строгие рассуждения" нет.

                    Строгий ответ, тем не менее, существует. Да, он вполне может оказаться невычислим доступными ресурсами. Именно поэтому мы полагаемся на эвристики. Но тогда критично понимать, что если эвристика говорит Б, то ответ не обязательно Б, и если он на самом деле не Б, то прислушаться к эвристике будет вашей ошибкой. И иллюстрации этого в примере с нулём я не вижу, более того, считывается (субъективно, как моя частная точка в статистике чтения) отношение "неважно какой строгий ответ, важно что сказали мои любимые эвристики".

                    Но если вы запустите ракету по эвристикам, и выданная ими программа запуска на самом деле неправильная - извините, в реальности ракета сегодня на Луну не полетит. Если ваши эвристики сказали "х.з. хозяин, мы понятия не имеем, чётное ли число ноль", и вы на этом основании обзавелись убеждением "0 - может чётное, может нечётное, может и то и другое одновременно, смотри "0 - неотрицательное"", то вы впустили себе в голову ложное убеждение. В модельном примере это выглядит как too clever for their own good - что вы запутали сами себя на ровном месте.


                    1. muxa_ru Автор
                      25.08.2025 05:51

                      И иллюстрации этого в примере с нулём я не вижу, более того, считывается (субъективно, как моя частная точка в статистике чтения) отношение "неважно какой строгий ответ, важно что сказали мои любимые эвристики".

                      Там явным образом написано, что это просто не важно.

                      Вопрос о том, является ли ноль чётным числом, не имеет никакой ценности.

                      Чётность как таковая, имеет практическую ценность, потому что связана с вопросом о возможности справедливого деления пополам или подсчёта голосов при принятии дихотомичного решения "да или нет". В случае с нулём такого вопроса не стоит.

                      В целом же, свойство "нацело делится на 2" ничем не отличается от свойства "нацело делится на ЛЮБОЕ ДРУГОЕ ЧИСЛО".

                      В реальности, вопроса о чётности нуля просто нет.

                      Если ваши эвристики сказали "х.з. хозяин, мы понятия не имеем, чётное ли число ноль", и вы на этом основании обзавелись убеждением "0 - может чётное, может нечётное, может и то и другое одновременно, смотри "0 - неотрицательное"", то вы впустили себе в голову ложное убеждение.

                      Но есть у этой темы и практически полезные свойства.

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

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

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

                      " вы запутали сами себя на ровном месте. " (с) @Abstraction


            1. Andy_U
              25.08.2025 05:51

              вроде того что x*y делится на b если и только если x делится на b либо y делится на b

              Именно, что вроде того :), а то 2 х 2 на 4 не делится :)


              1. Abstraction
                25.08.2025 05:51

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


                1. muxa_ru Автор
                  25.08.2025 05:51

                  :)