Ссылки на видеоверсию этой статьи

Содержание
Введение
Законы логики фундаментальны. Они описывают базовые принципы бытия и познания, поэтому лежат в основе наук, в основе формулировок любых частно-научных законов. Конечно, без законов логики невозможно представить себе и программирование как сферу человеческой деятельности. Хотя далеко не каждый программист сможет назвать эти законы, на практике же любой программист вынужден применять их, например, при конструировании логических условий.
Однако, без логики нет не только наук или практики программирования, без логики нет разума, а без разума нет и человека (в глубоком смысле этого слова). Это значит, что, если человек попирает законы логики, он уничтожает человека в себе самом. К сожалению, нет таких сил, которые вынуждали бы нас непрерывно совершенствовать своё логическое, критическое, системное мышление. Такое развитие остаётся делом личного выбора, а значит и мотивации к нему. Мы, люди в целом, чрезвычайно иррациональны и вечно чем-то заняты.
Будет замечательно, если эта небольшая статья подтолкнёт кого-то к изучению логики и, через это, к повышению личной культуры мышления. Это важно, поскольку в совершенствовании мышления состоит краеугольный камень личного, семейного и общественного благополучия. Почему? Потому что именно мышление является той «машиной по производству решений», которая может работать надёжно или с частыми поломками.
Законы логики – это основа надёжности мышления, без осознанного применения законов логики невозможно быть действительно уверенным (а не самоуверенным) в правильности своих выводов и принимаемых решений. И субъективные, и объективные причины проблем устраняются, когда люди находят и воплощают логичные решения.
Далее я расскажу о законах логики, используя в том числе примеры из программирования. Я думаю, что начинающему программисту это может помочь быстрее и точнее понять суть законов логики, просто «узнав» их в своей собственной деятельности, сделав для этого необходимое абстрагирование и обобщение. А затем это знание поможет применять законы логики уже в самом программировании. Но это лишь малая часть пользы. Поскольку законы логики универсальны, то было бы совершенно опрометчиво ограничить сферу их применения лишь программированием или даже науками. Поэтому я приведу и примеры из практики общения, из повседневности, чтобы начинающие программисты увидели, как можно переносить свои навыки кодирования в жизнь. Это поможет стать более адекватными и договороспособными собеседниками, поможет в конечном счете стать более счастливыми в личной жизни и более успешными в профессии. Всего законов логики четыре. Начнём с самого главного.
Закон тождества
Давайте вообразим, что пользователь вашей программы ввёл в поле ввода какие-то символы, ваша программа сохранила результат ввода в переменную Var1 и теперь должна с помощью логического условия проверить то, что пользователь ввёл, на равенство с образцом, который хранится в переменной Var2. Допустим, пользователь вводит пароль доступа, а ваша программа сравнивает полученный от этой строки хеш (сейчас он в переме��ной Var1) с тем, что лежит в базе данных (сейчас он в переменной Var2). На примере псевдокода это можно записать так:
If Var1 = Var2
А теперь предлагаю немного пофантазировать и представить, что в написанной строке кода имя одной из переменных в какой-то момент само собой (как по волшебству и непредсказуемо для самого автора кода) меняется. Или даже непрерывно и случайным образом меняются имена сразу обеих переменных в этом записанном программистом логическом условии. В один момент времени одна и та же строка с логическим условием содержит одни имена переменных, а в другой момент уже другие. Тогда что и с чем будет сравниваться при выполнении такого кода? Утрачивается необходимая для правильной работы программы определённость.
Чтобы программа правильно работала нужно, чтобы код соответствовал смыслу проектируемой программистом последовательности действий. Сравниваться должны значения конкретных, а не любых переменных. Например, если нужно сравнить то, что ввёл пользователь, с тем, что уже есть в памяти компьютера и получить результат сравнения, то бессмысленно вместо того, что ввёл пользователь подставлять текущее время, температуру процессора, размер файла или что-то ещё. Подобное может произойти, если программист допустит ошибку в имени переменной и по факту написанный код будет противоречить замыслу программиста. Говоря народным языком, если спутает Фому с Ерёмой. Это иллюстрация нарушения закона тождества – главного закона логики, который гласит:
Если предмет мышления не определён или многозначен, то правильное мышление невозможно.
Соблюдение этого закона обеспечивает определённость.
Ещё пример. Если в группе оживлённо беседующих программистов один под словом «ключ» понимает «введённую пользователем строку символов (пароль)», другой под этим словом имеет в виду «хеш от этой строки», третий под ключом понимает «поле для идентификатора записи в базе данных», а четвёртый под ключом понимает «ключ доступа passkey», то они не поймут друг друга (даже если будут думать, что понимают), пока не согласуют предмет мышления и беседы, то есть значение используемого слова (термина). Это тоже пример нарушения закона тождества, но уже в коммуникации между людьми. Закон тождества нарушается всякий раз, когда, образно говоря, путают Фому с Ерёмой, или мух с котлетами – когда не различают разное или когда, напротив, одно и то же принимают за различное.
Приведу менее очевидный пример нарушения закона тождества в программировании. Предположим, что пользователь скачал обновление уже установленной у него программы. Программа установки обновления показывает пользователю окно, в котором прописан путь установки обновления. При этом указан путь по умолчанию, а не тот, который пользователь ранее уже выбирал при первой установке приложения (предположим, что пользователь установил программу на диск, отличный от того, какой указан в пути по умолчанию, что не редкость). Теперь пользователю придётся снова выбрать путь к установленной программе. Но ведь пользователь обновляет программу, а не устанавливает её заново. Обновление приложения не тождественно его первой установке. Это совсем разные ситуации. В случае обновления программа должна изменить файлы по тому адресу, который пользователь уже указал ей раньше. То есть установщик должен получить информацию о том, где сейчас установлена программа и в поле для пути извлечения файлов автоматически подставить именно этот, уже ранее использованный путь.
Именно такова ситуация при обновлении десктопной версии мессенджера MAX (от дочерней фирмы ВКонтакте). Я понимаю острую необходимость в создании национального мессенджера (например, мошенники реально достали), поэтому и сообщил об этой ошибке разработчикам через чат поддержки ещё в сентябре 2025-го года, получил «Спасибо за ваше предложение!», но на момент создания этого текста (конец декабря 2025-го) проблема всё ещё актуальна. Хотя исправить её — пара пустяков.
Закон противоречия
Допустим, у нас есть суждение Var1 > 5 и есть суждение Var1 < 5. Например, переменная Var1 хранит количество правильно решённых заданий в тесте. В одно и то же время в одном и том же смысле переменная Var1 не может быть больше и меньше пяти одновременно, равно как она не может быть одновременно больше пяти и равной пяти, или иметь одновременно какие-то иные противоречащие друг другу значения. Даже составные операторы сравнения, вроде оператора «больше или равно», описывают конкретные (а не любые) условия, а значит эти условия могут в конкретный момент выполняться (соответствовать действительности) или не выполняться (не соответствовать действительности), могут противоречить или не противоречить друг другу. Это значит, что не могут быть одновременно истинными суждение Var1 > 5 и суждение Var1 < 5. Одно из этих суждений обязательно ложное, либо ложными являются оба суждения (например, истинным является суждение Var1 = 5). Конечно, закон противоречия работает (равно как и другие законы логики), только если не нарушается главный закон логики – закон тождества, а значит под Var1 понимается одна и та же переменная в одних и тех же условиях. Закон противоречия помогает обнаруживать ложные (не соответствующие действительности) суждения. Закон противоречия гласит:
Если одно суждение противоречит другому, то одно из них ложное, либо ложными являются оба суждения.
Этот закон помогает выявлять ложь, а его соблюдение обеспечивает непротиворечивость.
Из этого закона также следует, что если одно из противоречащих суждений доказано как истинное, то второе является однозначно ложным. На уровне Var1 > 5 и Var1 < 5 это выглядит тривиальным, однако не все суждения так просты и очевидны. В том числе в программировании.
Предположим, что у вас есть два суждения: Var1 = 1 и Var3 = 3, на первый взгляд противоречия нет. Но представим, что структура кода вашей программы позволяет переменной Var3 хранить значение «3» тогда и только тогда, когда Var1 равна нулю (подобное не является редкостью, например, при использовании различного рода «флагов», «меток», «счётчиков» и тому подобного). Допустим, Var1 хранит число ошибок, допущенных учеником в тесте, а Var3 хранит уровень достижений, и по алгоритму теста для получения пользователем третьего уровня в его ответах ошибок быть не должно совсем. В этом случае суждения Var1 = 1 и Var3 = 3 в условиях заданного кода противоречат друг другу, но не напрямую лексически (как было бы при записи: Var1 = 0 AND Var1 = 1), а поскольку описывают несовместимые для данной конкретной программы состояния действительности.
Зачастую логические противоречия проявляются при тестировании и, что хуже, при практическом использовании приложений. Это связано с тем, что приложения создаются не ради приложений – люди используют их для решения своих конкретных задач. Если смотреть на приложение из позиции пользователя, то приложение должно позволять решать те задачи, для решения которых создано. Иначе это нелогично организованное, неправильно спроектированное приложение.
Допустим, что вы создали «офисное приложение», которое может открывать и редактировать файлы с расширениями .docx и .pptx. Пользователю часто требуется работать одновременно с файлами разных типов, поэтому он очень удивится, если открытие файла .docx приведёт к автоматическому закрытию открытого ранее файла .pptx. Оказывается – либо одно, либо другое. Приложение обязано позволять делать то, для чего предназначено, и зачастую этот набор функций диктуется уже сложившимся пользовательским опытом, а не видением разработчика. Например, если пользователи привыкли к тому, что могут демонстрировать презентацию .pptx на экране проектора, а на мониторе компьютера могут на последующих слайдах подсмотреть комментарии или даже что-то изменить, пока зрители работают с текущим слайдом, не прерывая презентацию. И когда этот привычный сценарий оказывается невозможным, то у пользователя возникает чувство раздражения, негодования, разочарования, досады и другие подобные реакции.
Также для пользователя на каком-нибудь ответственном мероприятии будет очень неприятным сюрпризом обнаружить, что в его презентации GIF-анимация не поддерживается, а без этого не удастся наглядно донести смысл (например, выполняемых спортсменом движений), при этом после перерыва прыгнуть на нужный слайд он тоже не сможет, поскольку программа не умеет начинать демонстрацию презентации с выбранного слайда и ему придётся на глазах аудитории перели��тывать слайды в поисках нужного или на время отключать проектор.
Все описанные выше проблемы использования «офисного приложения» совершенно реальны и актуальны при использовании десктопного приложения 7Р-ОФИС (от компании АО «Р7»), которое официально позиционируется как «альтернатива продуктам от Microsoft Office». Я знаю это, поскольку использую данный софт в университете, в котором преподаю. Хочется верить, что указанные проблемы будут устранены разработчиком.
Закон исключённого третьего
Рассмотрим его на примере логического условия:
If Var1 = Var2
В конкретный момент времени значение переменной Var1 равно либо не равно значению переменной Var2 (например, ответ пользователя в тесте равен либо не равен хранимому образцу). Третьего варианта (то есть какого-то другого, иного) не существует. Логическое условие можно прочитать как вопрос «сейчас так (как записано в условии) или не так?» (иначе говоря: «логическое условие на момент его проверки выполняется или не выполняется?») и третьего не дано, иной вариант логически невозможен. Третий закон логики гласит:
Если одно суждение прямо отрицает другое (для противопоставления используется частица «не»), то одно из противоречащих суждений истинное. Третьего не дано.
Соблюдение этого закона обеспечивает логическую последовательность.
Поэтому закон и называется законом исключённого третьего. В отличие от закона противоречия, который помогает выявлять ложь, закон исключённого третьего помогает выявлять истину: либо записанное в логическом условии (на момент отработки строки кода с этим условием) соответствует действительности (говорят «условие выполняется») либо не соответствует действительности (говорят «условие не выполняется»). Одно из двух обязательно истинно. И только одно из двух.
Такая однозначность позволяет создавать различные фактические последовательности действий при разных входных данных. Именно логические условия делают возможными разные реакции программы на разные действия пользователя или на иные события, о которых программа может «узнать» (примеры событий: пользователь нажал на экранную кнопку левой кнопкой мыши, пользователь навёл курсор мыши на кнопку в приложении, истекло время таймера, наступили новые сутки, пользователь нажал «горячие клавиши», изменилось содержимое файла, установлено соединение с сетью Интернет и так далее).
Однако не только ошибки в логических условиях могут быть описаны третьим законом логики, существуют и другие логические ошибки в работе приложений, которые в своей сущности являются нарушением третьего закона логики. К таким ошибкам можно отнести, например, нарушение логичной для пользователя последовательности действий, что, конечно, создаёт негативный пользовательский опыт. В качестве примера приведу уже упоминавшееся настольное приложение MAX, которое при обновлении почему-то удаляет свой ярлык, закреплённый пользователем на панели задач. Если пользователь закрепил ярлык приложения на панели задач, то ожидает его там найти в следующий раз, когда приложение понадобится. Совершенно нелогично автоматически удалять этот ярлык при обновлении, поскольку это вынуждает пользователя заново его там закреплять.
Сформулируем проверочный вопрос, в форме закона исключённого третьего: данное приложение установлено или не установлено? Третьего не дано. Если оно уже установлено, то почему предыдущие настройки, сделанные пользователем, не сохраняются при обновлении? Третий закон логики позволяет обнаруживать непоследовательность в действиях как людей, так и программного обеспечения. О данной ошибке я сообщал разработчикам мессенджера MAX, но на протяжении нескольких месяцев она остаётся неисправленной.
Закон достаточного основания
Представим, что программист, тестируя свой код, пытается отловить ошибку. На каком основании он решает, что причина ошибки в чём-то конкретном? Действительно ли оснований для данного решения достаточно? Или это просто случайная догадка?
Закон достаточного основания гласит:
Только такое суждение может быть признано истинным, которое имеет достаточные для этого основания (то есть такие основания, из которых истинность следует с логической необходимостью, как следствие из причины).
Соблюдение этого закона обеспечивает обоснованность.
Закон достаточного основания, уже в смысле описания действительности, указывает на то, что у любого явления есть свои причины. Если написанный программистом код при работе программы даёт неожиданный результат, то у этого есть причина. Может быть, это опечатка в имени переменной, может быть, это неверно составленное логическое условие, может быть, не учтены какие-то факторы окружения, влияющие на работу программы, и так далее.
У любого явления (того, что изменилось или появилось) есть причина. Как известно, причина – это явление, которое предшествует следствию (другому явлению) и с неизбежностью порождает его. Обычно нелегко отделить причину от достаточных условий, поскольку что-либо может выступить в роли причины, только если есть необходимые и достаточные для этого условия. Однако в отличие от условий, причина определяет не возможность, а действительность (необходимость) бытия чего-либо.
Причиной какого-то явления оказывается такое конкретное изменение, которое делает текущий недостаточный набор условий достаточным для того, чтобы это явление (как следствие) возникло. Поскольку знание о причинах фиксируется в языке, то чтобы сформулировать причину чего-либо (т. е. следствия), необходимо, прежде всего, очень точно сформулировать это следствие. Причина выявляется логически и проверяется экспериментально (на практике).
В отличие от объективных причин и следствий в природе, в приложениях именно разработчик зачастую определяет, что будет основанием и для ка��ого именно следствия (например, что на самом деле произойдёт, если пользователь нажмёт на кнопку с заголовком «Открыть файл»). Если закон достаточного основания не нарушается, то наличие запрограммированного основания должно приводить к запрограммированному следствию. Если этого не происходит, то пользователи сообщают разработчикам об ошибках.
Если что-то запрограммировано, но не работает, то это однозначно распознаётся как ошибка. Однако задача распознавания нарушения закона достаточного основания резко усложняется, если речь идёт не о том, как программа работает, а о том, как она должна (например, по мнению пользователя) работать. Позиция (или роль), из которой производится анализ, актуализирует свои субъективные основания (потребности, мотивы, цели) для того, что должно или не должно быть следствием работы программы. Для сферы разработки приложений это, как правило, роль пользователя, роль заказчика, роль разработчика, роль дизайнера и другие роли.
Понимая, что далеко не все программы пишутся для пользователя, а также для того, чтобы не усложнять примеры, я в этой статье буду исходить из позиции пользователя, который считает, что программа, в которой он решает профессиональные задачи, создана для того, чтобы он (пользователь) мог эффективно решать в ней нужные ему (пользователю) профессиональные задачи. Например, если программа создана для преподавателей вузов, то эта программа должна позволять решать те профессиональные задачи преподавателей вузов, для решения которых создана.
То, что объявленные функции должны работать, не подлежит сомнению, а вот то, как именно они должны работать, часто становится предметом дискуссий. А в дискуссии только такое суждение может быть признано истинным, у которого есть достаточные для статуса истины основания. В условиях, когда основаниями пользовательского опыта выступают, с одной стороны, запрограммированные события, а с другой стороны, потребности, мотивы и цели субъектов разных ролей, найти истину становится нетривиальной задачей. Но не безнадёжной, если эти объективные и субъективные основания прояснять.
Приведу несколько таких дискуссионных примеров нарушения закона достаточного основания на материале пользовательского опыта работы с платформой Modeus (от компании CUSTIS). Это веб-приложение, открывающееся в браузере (но корректно и полнофункционально работающее только на компьютере, в десктопном браузере). Этим приложением я пользуюсь почти каждый день, чаще всего для того, чтобы выставить баллы и посещаемость студентам.
Так вот, чтобы проставить отметку о посещении занятия, нужно мышкой или стрелками на клавиатуре выбрать ячейку в таблице (на пересечении фамилии студента и текущей учебной встречи) и там дважды щелкнуть левой кнопкой мыши, либо единожды нажать любую букву, либо цифру на клавиатуре, чтобы появилась отметка «П» (что значит студент присутствовал). Чтобы получить «Н» (студент не явился), сначала придётся поставить «П» и затем изменить её на «Н», повторив двойной клик ещё раз, а чтобы снять отметку, потребуется воспроизвести щелчки в третий раз, и так по кругу. Но я хочу сказать не о количестве щелчков (может быть, программу писал любитель шутеров?), а о том, что двойной клик мышью, равно как и нажатие клавиши, далеко не всегда изменяет состояние ячейки.
Описывая языком логики: то, что должно выступить объективным основанием (причиной) для следствия (то есть двойной клик мышью должен изменить состояние ячейки), не оказывается таковым, причём в непредсказуемые для пользователя моменты (независимо от устройства, что было проверено на десятках разных компьютеров, поскольку работать приходится в разных аудиториях и в разных корпусах). Конечно же, это неудобно и приводит к ошибкам: путаются «П» и «Н», отметка то не проставляется, то ошибочно снимается.
Продолжу обсуждение функции проставления посещаемости, но теперь для иллюстрации конфликта объективных и субъективных оснований: есть возможность разом поставить всем «П», но нет возможности разом проставить всем «Н». На каком основании? Ведь если из группы в 30 человек на занятие пришло 10 человек, то удобнее отметить тех, кто пришёл, остальным автоматически проставив «Н».
Или вот ещё: на телефоне (не на компьютере) можно через специальное меню разом всем в учебной группе проставить отметку «П» или разом очистить всем отметки о присутствии, но невозможно в телефоне изменить эту «П» на «Н» для конкретного студента, что делает невозможным проставление разных отметок о посещении с телефона (в том числе выбрав в браузере способ отображения «Версия для ПК»). На каком основании так сделано? Раз с телефона невозможно проставить посещаемость (кроме как поставить всем «П»), то при отсутствии на рабочем компьютере интернета приходится проставлять присутствие сначала на листочек, а потом вносить в систему. Дублирование работы. Скорость работы с бумажным журналом посещаемости была в среднем приблизительно втрое выше (я просто ставил минус либо галочку в табличке на бумаге).
Кстати, через упоминавшееся специальное меню (в котором можно всем разом выставить «П») есть и пункты меню для выбора способа сортировки списка студентов. Так вот, если дважды щелкнуть по пункту меню сортировки (например, выбрав «Сначала те, кто присутствовал»), то кроме сортировки списка студентов случится ещё кое-что: изменится отметка о посещении студентом занятия, если она была под курсором (например, «П» заменится на «Н»). Преподаватель этого не заметит, поскольку случившаяся сортировка скроет от него факт изменения отметки о посещении. И это может стать причиной конфликта: студент будет расстроен неправильным учётом посещаемости и будет просить преподавателя вернуть как было, а преподаватель будет думать, что студент его обманывает, ведь он лично опрашивал присутствующих, когда отмечал. Но ведь преподаватель щелкал по меню, а не по ячейке под этим меню. На каком основании двойной щелчок распространился и на ячейку под пунктом меню? Или это фича, а не баг?
По идее, если пользователь случайно кликнул дважды по пункту меню, то пункт меню должен воспринять один клик и скрыться, второй клик должен распространиться уже на область под меню, но по факту на область под меню (то есть по ячейке таблицы) распространяется оба клика, хотя визуально для пользователя двойной клик осуществляется по пункту меню. Какие бы технические трудности ни стояли перед разработчиками, они должны быть преодолены, чтобы приложение могло выполнять без ошибок то, для чего предназначено.
Ещё «дискуссионный пример» из опыта работы с платформой Modeus. Когда курс в конце семестра завершён, то преподаватель должен «зафиксировать текущую успеваемость» (т. е. проверить и выставить, если это не было сделано ранее, отметки о посещаемости, баллы и нажать кнопку «зафиксировать»). Это требуется сделать прежде, чем система позволит преподавателю «зафиксировать оценки в экзаменационной ведомости». На каком основании разделена «фиксация» баллов за учебные встречи и за финальную аттестацию по курсу? При этом фиксировать текущую успеваемость необходимо по лекциям отдельно, по практикам отдельно (а если есть другие виды учебных встреч, то и там отдельно). То есть для каждой «фиксации» нужно выбрать соответствующую группу (если их по дисциплине несколько) и вид занятий, затем повторить это с другим видом занятий и для другой группы. На каком основании так усложняется работа с ведомостями?
Раньше, чтобы «зафиксировать» отметки в бумажной ведомости после проведения зачёта или экзамена, мне было достаточно поставить подпись на листочке с ведомостью и отдать её в деканат. Теперь же требуется выполнить множество «фильтраций» и «фиксаций». Скорость работы с цифровой системой учёта посещаемости и ведомостями должна быть выше, чем с бумажным журналом успеваемости и бумажными ведомостями. А на деле наоборот. Нелогично. Естественно, об указанных проблемах (как и многих других у этого программного продукта) я многократно сообщал в службу поддержки разработчика Modeus. В ответ получал «спасибо за неравнодушное отношение», но сами проблемы не решаются уже несколько лет. А ведь этой платформой пользуются преподаватели и студенты более десятка весьма известных вузов России.
Нарушения законов логики в повседневности
Программист, который понимает универсальность законов логики, может (а, по идее, должен) перенести их из программирования в свою практику общения с людьми (причём не только с клиентами), в способы принятия бытовых решений, в процессы реагирования на поступки или слова людей. Перечислю ниже примеры типичных нарушений законов логики в повседневной жизни.
Нарушения закона тождества (они проявляются как различного рода подмены): человеку задают один вопрос, а он отвечает на другой; собеседник в какой-то удобный для него момент подменяет одно значение слова другим в процессе беседы; спорщик приводит аргумент, не связанный с доказываемым тезисом; вам приписывают слова или действия, которых вы не совершали; оппонент в споре противопоставляет вашему сильному аргументу (например, указание на объективный факт) свой слабый аргумент (например, ссылку на авторитет), утверждая, что эти аргументы равноценные; манипулятор пытается убедить вас в том, что его мотивы являются вашими; собеседник отождествляет слова и то, что ими обозначается; критик подменяет часть и целое, частное и общее; в разговоре путаются вероятное, действительное и нужное; одно понятие подменяется другим, как, например, понятие «биологический пол» (мужской или женский, который генетически определён) с понятием «гендерная идентичность» (то есть то, кем человек себя считает – мужчиной или женщиной); переход с предмета беседы на личности; провокация эмоций; и прочие подмены.
Нарушения закона противоречия (они проявляются как игнорирование противоречия): человек говорит одно, а делает другое (например, говорит, что хочет постройнеть, но при этом заказывает еды много больше, чем требуется для поддержания нормального веса при его активности); собеседник сам себе противоречит в высказываниях (например, минуту назад на совещании говорил, что этот подход не применим, а сейчас сам же его предлагает); руководитель ставит одни цели, а поощряет за достижение других (например, целевые показатели деятельности сотрудников не соответствуют поставленным перед сотрудниками целям); собеседник объединяет противоположное или несовместимое (например, свидетель события описывает то, что случилось несовместимыми суждениями); отсутствие необходимых знаний о фактах; наличие эффективных технологий и отсутствие их адекватного применения; человек повторяет ошибочные действия, продолжает, как говорят, наступать на те же грабли; и прочие способы игнорировать противоречия.
Нарушения закона исключённого третьего (они проявляются как отсутствие последовательности): человек принимает решение, но не реализует его (например, собрался делать определённые упражнения каждый день, но не делает); даёт обещание, но не исполняет его; собеседник не различает отношения между понятиями (тождество, подчинение, пересечение, части и целого, соподчинения, противоположности, противоречия, несравнимые), поэтому не может мыслить последовательно; спорщик не различает виды условных умозаключений, поэтому не знает, в каких случаях можно сделать однозначный, а в каких случаях лишь вероятностный вывод; автор вывода видит логическую последовательность там, где её нет (например, делает ложный вывод из истинных посылок); мошенник создаёт ложную альтернативу (как если бы не существовало иного варианта, кроме им предложенных); человек не делает необходимый вывод из имеющейся у него информации (например, таким способом психически защищаясь от неприятного для него знания); и прочие виды непоследовательности.
Нарушения закона достаточного основания (они проявляются как безосновательные выводы): критик вашей идеи, не спросив мнение остальных по этому вопросу, приписывает своё мнение всем присутствующим (мол, «мы все против твоей идеи»); комментатор под постом в социальной сети высказывает своё мнение, не имея опыта взаимодействия с предметом беседы; спикер приводит неоправданную или ложную аналогию; спорщик приводит субъективную оценку своих чувств как аргумент в доказательство своей позиции (например, говорит, что любит, но не совершает тех действий, следствием которых является любовь, любовь не как субъективная оценка собственных переживаний, а как реальное состояние межличностных отношений); автор умозаключения исходит в своём выводе из неверных (ложных) предпосылок; предшествующее необоснованно толкуется собеседником как причина; отсутствие немедленных последствий толкуется как отсутствие последствий (например, родители говорят детям, что сидеть сгорбившись вредно, но дети это легко игнорируют, поскольку не ощущают немедленных последствий для своего здоровья и безосновательно решают, что вреда нет); и прочие безосновательные выводы.
Как законы логики связаны между собой и с миром
Применительно к мышлению законы логики описывают свойства дисциплинированного, можно сказать, образованного мышления. Так, определённость (то есть закон тождества), непротиворечивость (то есть закон противоречия), последовательность (то есть закон исключённого третьего) и обоснованность (то есть закон достаточного основания) – как уже свойства мышления – могут быть перенесены в повседневное общение с членами семьи, с друзьями, коллегами, руководством, в процессы восприятия и анализа информации. Но поскольку ничто не обязывает человека мыслить логически, то такой п��лноценный перенос понимания законов логики во все сферы жизни может так никогда и не произойти.
Однако, если программист поставит себе задачу использовать законы логики и за пределами кодинга, то практика программирования, как своего рода тренажёр логического и критического мышления, будет способствовать совершенствованию всех остальных сфер жизни программиста.
Если же в какой-то момент кажется, что какой-то закон логики не работает, значит, нарушен первый и самый главный – закон тождества. Нужно уточнить понятия, сосредоточиться на предмете мышления и беседы, ясно определить его и решаемый вопрос. После того как закон тождества в мышлении восстановлен (что проявится как свойство мышления – «определённость»), снова заработают в мышлении и другие законы логики.
В устройстве действительности, в отличие от умозаключений человека, законы логики не могут не работать, поскольку описывают именно то, как «работает» действительность. Можно сказать, что законы логики констатируют общее устройство действительности.
Соотношение законов логики между собой и с миром важно понимать, чтобы присвоить законам логики верное значение. Первый закон является самым важным, поскольку описывает саму возможность сосредотачивать внимание, мыслить о чем-либо – о понятии или реальном событии, или о чём-то ещё. Если это что-либо не определено ясно, не находится в фокусе внимания, то нет никакой возможности утверждать, что дальнейшие выводы сделаны именно об этом (например, вполне вероятно, что собирались анализировать поступок Фомы, а сделали вывод о поступке Ерёмы).
Необходимо удерживать предмет мышления и различать нетождественные смыслы, чтобы обнаружить, что один смысл противоречит другому. То есть закон противоречия работает, только если не нарушается закон тождества. В свою очередь, чтобы заработал закон исключённого третьего, надо сначала суметь обнаружить отношение противоречия между смыслами каких-то суждений и затем уточнить его до отношения взаимного исключения между смыслами. Получается, что третий закон не работает без второго так же, как второй без первого. Наконец, чтобы заключить о достаточности или недостаточности оснований для вывода, нужно воспользоваться третьим законом логики – обнаружить, что третьего варианта здесь быть не может: оснований достаточно или не достаточно.
Закон тождества главный, остальные законы мышления можно рассматривать как форму его постепенного уточнения, конкретизации, с целью установления отношений между понятиями, суждениями или целыми умозаключениями. Поэтому и логические ошибки в своей сущности – это всегда нарушение закона тождества (то есть человек что-то с чем-то путает), но для практического удобства есть смысл логические ошибки уточнять до конкретного закона логики, там, где это возможно.
Все четыре закона логики являются непреложными и вечными. Несмотря на то, что они сформулированы людьми (первые три сформулировал ещё Аристотель, а четвёртый связывают с именем Г.В. Лейбница), их невозможно опровергнуть, поскольку они отражают свойства Вселенной, её устройство. Проще говоря, не Аристотель придумал, что два разных яблока не являются одним и тем же яблоком и не являются грушей, он просто сформулировал знание об этом в виде закона тождества.
В этом смысле закон тождества описывает то, что соответствовало действительности и до Аристотеля, и до динозавров, и до появления нашей солнечной системы, и так дальше. Закон тождества просто констатирует тот факт, что одно дерево не есть другое дерево (конечно, если не нарушать закон тождества и не с��итать одним и тем же деревом разные деревья, например, на том основании, что они произошли от общего родительского дерева).
Также и закон противоречия словами описывает тот факт, что любой объект, обладая какими-либо свойствами, тем самым не обладает другими, противоположными или несовместимыми свойствами (в одно и то же время, в одном и том же пространстве, в одном и том же отношении). Закон противоречия просто констатирует то, например, что выпущенная из лука стрела не летит в противоположные стороны одновременно (если не нарушать закон тождества и не подменять предмет мышления, например, заменив описание движения стрелы относительно лука описанием движения всей планеты вместе с выпущенной стрелой относительно какой-то точки в пространстве, мол, стрела летит одновременно и в противоположную сторону, если в эту сторону летит вся планета).
Аналогично и закон исключённого третьего является лишь формулировкой того объективного факта, что любое свойство объекта (в конкретный момент времени, в конкретном пространстве и в конкретном отношении) принадлежит ему или не принадлежит ему. Закон исключённого третьего просто констатирует то, например, что данная лисица сейчас бежит за этим вот зайцем или не бежит за ним (если не нарушать закон тождества и не предлагать версии, вроде той, что это заяц от лисы бежит, а она за ним не бежит, а просто гуляет и у них случайным образом совпадают траектории движения).
В свою очередь, закон достаточного основания отражает в мышлении тот факт, что какое-то изменение приводит к порождению какого-то явления и тогда является причиной этого нового явления, а если не приводит, тогда не является причиной этого нового явления. Закон достаточного основания просто констатирует то, например, что есть причины хорошего урожая, равно как и причины у плохого урожая. Указать на достаточность оснований – это способ сказать о чем-то как о причине для явления (следствия). В логическом мышлении таким следствием выступает правильный вывод, а причиной истинности (правильности) вывода – достаточные основания.
Причины и следствия не являются изобретением человека: одни явления порождают другие явления и там, где людей нет и никогда не было. Поэтому уместно говорить о том, что законы логики – это формулировки фундаментальных законов бытия и познания. Любые другие законы могут быть корректно сформулированы только с соблюдением законов логики. Любая попытка опровергнуть законы логики потребует логического же обоснования (то есть логических аргументов и фактов), и тем самым лишь подтвердит их значение.
Поскольку законы логики отражают устройство бытия, то опровергнуть их невозможно. Можно только создать видимость (иллюзию) опровержения ценой подмены понятий, то есть посредством нарушения закона тождества. В этом смысле показательны различного рода парадоксы, наличие которых всегда указывает на нарушение закона тождества. В устройстве бытия парадоксов нет, хоть в макромире, хоть в микро. Парадоксы существуют только в сознании, как результат нарушения закона тождества. Любой парадокс строится на нарушении закона тождества. В процессе совершенствования наук парадоксы устраняются. В будущем будут разрешены и те парадоксы, которые сейчас занимают умы учёных (например, так называемый корпускулярно-волновой дуализм). Если человечество выживет и будет продолжать совершенствовать науки, конечно.
Заключение
Понимание фундаментальности законов логики имеет смысл, поскольку может быть достаточным основанием для того, чтобы человек стал осознанно применять их в своей жизни. Это возможно, если сделать такой личный выбор. Тогда свободный волевой выбор станет причиной, тем изменением, которое сделает недостаточный набор условий достаточным, чтобы искомое следствие (то есть более правильное и целостное мышление) возникло.
Ссылки на дополнительные материалы
Узнать больше о законах логики и улучшить свои мыслительные функции на специально разработанных тренажёрах можно на моём бесплатном онлайн курсе «Развитие логического, критического, системного мышления» (потребуется регистрация на сайте). Гиперссылки в статье ведут на словарь, являющийся элементом этого курса.
Видеоверсию этой статьи и другие материалы по теме можно посмотреть на моих каналах, посвящённых культуре мышления (в основном дублируют друг друга):
Дзен канал «Культура мышления».
VK сообщество «Культура мышления».
Telegram канал «Культура мышления».
Rutube канал «Вадим Лёвкин».
YouTube канал «Вадим Лёвкин».
