2Введение в математическую логику

2.1Высказывания

2.1.1Примеры высказываний

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

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

Как обычно, проще привести несколько примеров.

Пример.
  • «» — пример высказывания. Оно ложно.
  • «» — ещё один пример высказывания. Оно истинно.
  • « — простое число» — ещё одно истинное высказывание.
  • «Множество простых чисел конечно» — это ложное высказывание.
  • «Если целое число простое и оно больше двух, оно нечётно» — истинное высказывание.
  • «Каждое чётное число, большее двух, можно представить в виде суммы двух простых чисел» — это высказывание, истинность которого в настоящий момент неизвестна (это так называемая бинарная проблема Гольдбаха).
  • « — чётное число» — это не высказывание, потому что непонятно, чему равно (здесь, конечно, под подразумевается не собственно буква, а переменная, которая может принимать разные значения), и поэтому это утверждение не является ни ложным, ни истинным. С такого типа утверждениями (они называются предикатами) мы познакомимся чуть позже.

Вместо «истинно» или «ложно» используются и другие синонимичные выражения: верно (неверно), корректно (некорректно) и т.д.

2.1.2Операции с высказываниями

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

Определение 1. Высказывание «верно по крайней мере одно из двух высказываний или (или оба)», называется дизъюнкцией высказываний и . Оно обозначается . Другой термин для дизъюнкции — логическое «ИЛИ».

Определение 2. Высказывание «верны оба высказывания и » называется конъюнкцией высказываний и . Оно обозначается . Другой термин для конъюнкции — логическое «И».

Определение 3. Высказывание «высказывание неверно» называется отрицанием . Обозначается . Другой термин — логическое «НЕ».

Если про каждое из высказываний и известно, является оно истинным или ложным, легко установить истинность их конъюнкции, дизъюнкции и отрицания. Например, если истинно, то ложно. Если и оба истинны, то истинно, иначе оно ложно. И так далее. Эту информацию удобно записывать в виде табличек, которые называются таблицами истинности.

Таблица истинности для отрицания выглядит так:

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

2.1.3Раскрытие скобок с отрицанием

Пусть и — какие-то высказывания. Рассмотрим высказывание , то есть отрицание высказывания . В каком случае оно истинно? Только в том случае, когда оба высказывания и ложны. Действительно, если хотя бы одно из них истинно, тогда их дизъюнкция (логическое ИЛИ) истинна и значит её отрицание ложно. Записывая это соображение в виде формулы, получаем такое равенство:
Второе равенство верно, поскольку операция отрицания имеет приоритет перед конъюнкцией, то есть в формуле сначала выполняются отрицания, а потом конъюнкция, так что скобки вокруг и можно не писать.

Аналогично можно рассмотреть высказывание . Чтобы оно стало истинным, достаточно, чтобы хотя бы одно из высказываний или было ложным: тогда их конъюнкция (логическое И) ложна и её отрицание истинно. Таким образом:

Можно сказать, что при раскрытии скобок, перед которыми стоит отрицание, знак меняется на и наоборот.

Эти правила преобразования формул в алгебре логики называются законами де Моргана.

Замечание 1. Законы де Моргана мгновенно обобщаются на случай большего количества высказываний. Например:

2.1.4Логические операции в программировании

В распространённых языках программирования высказываниям соответствуют выражения, имеющие значения типа «булевская величина» (например, в Python это bool), то есть принимающие значения «истина» или «ложь» (True и False). Например, 2 + 3 == 4 имеет значение False, а 3 > 2True. К булевским значениям можно применять логические операторы and, or и not. Например, 2 * 0 == 1 or 3 > 2 имеет значение True.

2.2Предикаты и кванторы

2.2.1Примеры предикатов

Выше фигурировал пример утверждения « — чётное число». Если задать вопрос, является оно истинным или ложным, вы скорее всего скажете, что вопрос не имеет смысла: как можно на него ответить, если не знаешь, чему равно ? Это пример утверждения, не являющегося высказыванием. Утверждения такого типа называются предикатами.

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

Пример 1. Рассмотрим предикат « — чётное число». Его можно обозначить какой-нибудь буквой, аналогично обозначению функций — например, . При подстановке конкретного предикат становится высказыванием, которое является истинным или ложным. Например, истинно, а — ложно. Подобно функциям, у предикатов есть «область определения» — множество значений, которые могут принимать переменные. Например, давайте считать, что областью определения для является множество натуральных чисел, (но можно было бы определить аналогичный предикат и для множества всех целых чисел).

Пример 2. Определим предикат — « делится на ». Этот предикат зависит от двух переменных. Будем считать, что и . Например, — ложь, а — истина.

Пример 3. Ещё нам понадобится предикат , определенный для вещественных и . Он проверяет, что равняется .

Замечание 2. В дальнейшем в этой главе, если не оговорено обратное, мы будем считать, что буквы , , обозначают натуральные числа, а и — вещественные.

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

В следующем разделе мы познакомимся с ещё одним способом создания новых предикатов из существующих.

2.2.2Квантор всеобщности

Давайте рассмотрим предикат . Он проверяет, что натуральное число делится на . Но все натуральные числа делятся на 1! Это можно сформулировать следующим образом: «для всех значений предикат имеет значение „истина”». Есть специальный короткий способ записывать такого типа утверждения:
Знак (перевёрнутая буква A, от all) называется квантором всеобщности. Он читается «для всякого».

Вопрос 1. Рассмотрим утверждение , где — предикат, проверяющий, что натуральное число является чётным. Что вы можете сказать про построенное таким образом утверждение?
  Оно истинно.

Неверный ответ. Вы уверены? В этом утверждении сказано: «для любого натурального верно, что чётно». Иными словами, это утверждение можно переписать так: «все натуральные числа — чётны».

  Оно ложно.

Верный ответ. Да, потому что бывают нечётные числа. Например, — ложно.

  Невозможно определить его истинность, зависит от значения .

Неверный ответ. Нет! В этом утверждении сказано: «для любого натурального верно, что чётно». Иными словами, это утверждение можно переписать так: «все натуральные числа — чётны». Это утверждение попросту неверно.

Замечание 3. Пусть — какой-то предикат. Рассмотрим утверждение . Если при всех значениях является истинным, значит, это утверждение истинно. В противном случае, ложно. Поэтому получившееся утверждение не является предикатом, оно является просто высказыванием, которое может быть истинным или ложным. Заметим, что хотя переменная фигурирует в этом утверждении, мы не можем подставлять вместо неё какие-либо конкретные значения. Нельзя записать , это не имеет смысла, поскольку после квантора обязательно должна идти переменная, а не какое-то конкретное число. Переменная в этом случае называется связанной: она существует как бы только внутри утверждения, но «извне» мы не можем её менять.

2.2.3Квантор существования

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

Рассмотрим предикат , проверяющий, является ли натуральное число совершенным. (Иными словами, соответствует утверждению « — совершенное число».)

Если взять какое-то конкретное , очень легко проверить, является ли оно совершенным. Например, число имеет три собственных делителя, , и , но — значит, оно не совершенное. Но существуют ли вообще совершенные числа? Иными словами, верно ли утверждение: «существует такое , что имеет значение „истина”»?

Для формулирования таких утверждений также есть специальное короткое обозначение:

Знак (перевернутая буква E, от exists) называется квантором существования. Читается просто «существует [такое]».

Аналогично квантору всеобщности (см. замечание 3), квантор существования «связывает» соответствующую переменную. Утверждение , хотя в нём фигурирует переменная , не является предикатом, зависящим от . Это просто высказывание, которое является истинным (если совершенные числа существуют), или ложным (если их нет).

Кстати, совершенные числа существуют. Например, число 6 совершенно. Это доказывает, что утверждение является истинным.

2.2.4Кванторы и отрицание

Есть обобщение законов де Моргана на формулы с кванторами. Рассмотрим какой-нибудь предикат . (Например, принадлежит множеству всех крокодилов, а проверяет, что крокодил является красным.)

Рассмотрим высказывание («все крокодилы красные»). Чтобы его опровергнуть (то есть доказать его отрицание), достаточно предъявить какого-нибудь крокодила, который бы не был красным. Иными словами, верно равенство:

Аналогично, можно рассмотреть утверждение («существует по крайней мере один красный крокодил»). Чтобы его опровергнуть, нужно перебрать всех крокодилов, и проверить, что каждый из них не является красным. Иными словами, верно такое равенство:
Можно сказать, что при переносе знака отрицания через квантор он меняется на обратный: существование на всеобщность и наоборот.

Замечание 4. Рассмотрим какой-нибудь предикат , определенный на множестве . Тогда утверждение эквивалентно такому: . Его отрицание легко переписать по законам де Моргана:
Оно в свою очередь эквивалентно . Таким образом, правило переноса знака отрицания через квантор — это действительно обобщение законов де Моргана.

2.3Кванторы и предикаты с несколькими переменными

2.3.1Связывание одной переменной

Рассмотрим предикат , определённый для вещественных и . Рассмотрим такое утверждение: . Что это за объект?

Если задать конкретное значение , например, , получается такая штука: , или попросту

Иными словами, получается высказывание о том, что существует квадратный корень из числа . Это высказывание ни от чего не зависит и является верным, чтобы его доказать, достаточно предъявить .

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

Это утверждение неверно: мы знаем, что квадраты вещественных чисел неотрицательны, и значит не существует такого , что его квадрат равен .

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

Таким образом, из предиката с двумя переменными мы получили предикат с одной переменной , поскольку переменную «связали» с помощью квантора. В высказывании переменная называется «свободной» (мы можем задавать её значения как хотим и получать разные высказывания), а переменная — «связанной».

2.3.2Последовательное применение кванторов

Рассмотрим предикат , определенный на множестве натуральных чисел. Он проверяет, что больше . Введём новый предикат:
Теперь можно рассмотреть высказывание . Его можно записать так:
Скобки вокруг предиката можно убрать, и получится такая запись:
Читается: «для всякого существует такое , что ».

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

Является ли оно истинным? Да, является. Действительно, возьмём любое . Заметим, что для него предикат верен, поскольку существует такое (например, можно взять ), для которого . (Действительно, , каким бы ни было .)

Словами это высказывание можно было бы записать так: «для всякого натурального числа найдётся большее его число». Эта формулировка с точки зрения привычного нам языка выглядит немножко неестественно и может возникнуть искушение сделать её более привычной, переформулировав таким образом: «найдется натуральное число, большее любого другого натурального числа». Однако, то, что в результате получилось — не переформулировка исходного утверждения, а совсем другое высказывание. Оно формально записывается так:

Как видно, эта формулировка отличается от (2.4) только порядком следования кванторов. Однако, её смысл совсем иной. При доказательстве высказывания (2.4) мы для каждого конкретного могли выбирать своё , так, чтобы сделать предикат справедливым. В высказывании (2.5) мы должны задать одно-единственное , такое, что для него предикат был бы верен для всех возможных . Нетрудно видеть, что среди натуральных чисел такого нет. Действительно, каким бы мы ни взяли , можно положить (или , или и т.д.), и предикат не будет верным. Видно, что порядок следования кванторов очень важен: он определяет порядок, в котором соответствующие переменные могут выбираться. В данном случае при изменении порядка кванторов получились разные результаты: утверждение с одним порядок истинное, а с другим ложное. Так бывает не всегда (придумайте пример, когда это не так), но важно понимать, что изменение порядка следования кванторов создаёт другое утверждение.

2.3.3Отрицание и серия кванторов

Мы уже опровергли утверждение (2.5), но давайте ещё раз более подробно поговорим, как мы это сделали. Чтобы опровергнуть утверждение с кванторами обычно проще всего записать к нему отрицание, а потом доказать это отрицание. Воспользуемся формулами из раздела 2.2.4. Обозначим предикат через . Утверждение (2.5) можно переписать в виде:
Применим к нему равенство (2.2):
Теперь можно к выражению применить формулу (2.1) и подставить результат в (2.6):
Мы как бы последовательно перекинули знак отрицания сначала через первый квантор, а потом через второй. Каждый раз квантор менялся на противоположный. Наконец, отрицание оказалось записано перед предикатом , но мы знаем, что отрицание к утверждение — это утверждение, что . Итак, отрицанием к высказыванию (2.5) является высказывание
Докажем его. Для этого нужно научиться для всякого предъявлять такое , что . Это просто: достаточно взять, например, . С тем же успехом можно было бы взять или .

2.4Импликация

Давайте рассмотрим такое утверждение: «если натуральное число делится на 4, то оно делится на 2» (обозначим его за ). Как мы знаем, это верное утверждение. Как его сформулировать на языке кванторов и предикатов? Давайте введём предикат , проверяющий, что делится на 4. Раньше мы вводили предикат , проверяющий чётность . Поскольку речь про все натуральные числа, следует начать с квантора . Очевидно, дальше нужно написать какое-то утверждение с предикатами и , но какое?

Вероятно, здесь проще начать с отрицания. Что нам нужно было бы сделать, чтобы опровергнуть утверждение ? Нужно придумать такое , чтобы оно делилось на , но при этом не делилось на 2. Именно такой контрпример, если бы он был построен, опроверг бы наше утверждение. Иными словами, нам нужно было бы предъявить такое , что выполняется, а нет, то есть верно утверждение . Итак, отрицание к выглядит так:

Взяв отрицание от этой формулы, получим формулировку для исходного утверждения:
Иными словами, мы утверждаем, что для всякого выполняется следующее. Либо оно не делится на 4 (тогда является истинным: про числа, которые не делятся на 4, мы ничего не утверждаем, а если мы ничего не утверждаем, то нечему быть неверным), либо, если оно делится на 4 (то есть ложно), оно обязано делиться на 2 (чтобы вся дизъюнкция была истинной, если второй её аргумент ложный, то первый — в данном случае, — должен быть истинным).

Это ровно то, что мы хотим сказать.

Вопрос 2. Зачем городить такой огород? Почему нельзя было просто написать
  Можно было так и написать, формулы (2.8) и (2.7) эквивалентны.

Неверный ответ. А вот и нет. Например, утверждение и формула (2.7) являются истинными, а утверждение в формуле (2.8) ложно. Действительно, возьмём, например, . Оно не делится на 4, значит, ложно, и значит для этого значения конъюнкция ложна, а раз такое нашлось, то и всё утверждение ложно. Проверьте, что этот пример не опровергает утверждение (2.7).

  Потому что это совсем другое утверждение, оно не эквивалентно .

Верный ответ. Так и есть. Например, утверждение и формула (2.7) являются истинными, а утверждение в формуле (2.8) ложно. Действительно, возьмём, например, . Оно не делится на 4, значит, ложно, и значит для этого значения конъюнкция ложна, а раз такое нашлось, то и всё утверждение ложно. Проверьте, что этот пример не опровергает утверждение (2.7).

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

Эта операция с высказываниями и настолько важна, что хотя она и выражается через конъюнкцию, дизъюнкцию и отрицание, у него есть специальное название — импликация (ср. с английским словом imply, влечёт), и специальное обозначение: . Утверждение называется посылкой, а утверждение заключением.

Давайте построим таблицу истинности для (то есть ).

Эта таблица, и особенно её третья строчка, обычно ставит в тупик всех, кто её в первый раз видит. «Из лжи следует истина!» — как такое может быть? Дело в том, что если вы делаете утверждение («Если истинно, то тоже истинно»), и оказалось ложным, то это просто означает, что вы находитесь в ситуации, про которую вы ничего не утверждали. А раз ничего не утверждали, то не могли и ошибиться. И значит вы правы (ваше утверждение истинно), вне зависимости от того, является ли истинным или ложным.

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

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

2.5Применение языка матлогики в этой книге

2.5.1Формальный и естественный язык

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

Когда я учился на первом курсе и только познакомился с этим языком, я был им очарован: какое-то время мне казалось, что достаточно записать любое утверждение «в кванторах», и дальше станет понятно, как его доказывать. Однако очень быстро я обнаружил, что это не так: формальная запись иногда упрощает некоторые логические переходы, и она часто необходима, чтобы убедиться в правильности доказательства, но чтобы придумать доказательство, нужно проникнуть в суть утверждения, а не просто манипулировать строчками с кванторами.

При этом «суть», то есть идеи, стоящие за математическими рассуждениями, как правило проще передавать, пользуясь преимущественно естественным языком, а не формальным. В конце концов, профессиональные математики пишут научные статьи именно на естественном языке, используя формальный лишь там, где это действительно необходимо. Что уж говорить об учебнике, читатели которого видят все эти кванторы впервые в жизни! Так что пусть вас не пугает обилие новых обозначений и понятий в этой главе: мы будем ими пользоваться и их нужно освоить, но все утверждения, сформулированные формально, мы будем подробно комментировать «по-человечески».

2.5.2Сокращённые обозначения

Чтобы немножко упростить обозначения в формулах с кванторами и приблизить их к естественному языку, я разрешу себе чуть-чуть отступить от правил формального языка, введённого выше. Во-первых, часто после серии кванторов я буду ставить двоеточие — например, вместо
буду писать
Двоеточие тут не несёт никакой содержательной нагрузки и служит просто для визуального отделения предиката, на который навешиваются кванторы. Оно также будет заменять скобки — например, в высказывании
кванторы навешиваются целиком на предикат , а не только на часть . Иными словами, эта запись эквивалентна такой:
Во-вторых, я буду зачастую писать условие, которому должно удовлетворять значение переменной, сразу после квантора. Например, утверждение (2.9) можно записать так:
Аналогично я часто буду указывать, из каких множеств допустимо брать значения переменных. Например, если бы я хотел сказать, что для любого натурального числа найдётся такое рациональное число, что их произведение больше 9, то записал бы это так:
Формально более аккуратная, но громоздкая запись этого же утверждения звучит следующим образом:

Вопрос 3. Останется ли это утверждение верным, если заменить условие на условие ?
  Да.

Неверный ответ. Прямо-таки для любого целого числа вы можете найти рациональное, чтобы их произведение было больше 9? Гм… А какие ненатуральные целые числа вы знаете? Приведите пару примеров.

  Нет.

Верный ответ. Конечно, достаточно взять

Вопрос 4. Останется ли это это утверждение верным, если заменить условие на условие ?
  Да.

Неверный ответ. Какой знак имеет произведение натурального числа и отрицательного?

  Нет.

Верный ответ. Конечно, произведение натурального числа и отрицательного всегда отрицательно и не может быть больше 9.

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

Упражнение 1. Запишите отрицание к утверждению (2.10), пользуясь правилами переноса отрицания через кванторы и законами де Моргана. Запишите получившееся утверждение в краткой форме, размещая условия сразу после кванторов. Что происходит с этими условиями при переносе через них отрицания — меняются ли они?

2.6Заключение

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