---
“Логика для чайников” пока находится в стадии проекта. Из-за этого случаются некоторые накладки. Например, то, что темы у меня идут вперемешку, я нередко возвращаюсь к старой теме, продолжая ее, а потом перескакиваю на другую. Конечно, в финальном варианте все это будет приглажено.
Сейчас я собираюсь вернуться к рассмотрению свойств логических операций. Если кто-то хочет “освежить” тему в голове, то вот ссылочки:
Введение:
http://psilogic.livejournal.com/165746.htmlЗакрепление:
http://psilogic.livejournal.com/171071.htmlЗаконы поглощения:
http://psilogic.livejournal.com/172313.htmlСерии операций:
http://psilogic.livejournal.com/178040.html---
Свойства логических операций (двойное отрицание)
Оказывается, логические операции во многом похожи на обычные арифметические - сложение, умножение и прочее. Благодаря такому сходству, легче все запомнить. Но важно понимать, что сходство не 100%-ное, нельзя все подряд переносить из арифметики в логику.
Вот закон двойного отрицания:
НЕ НЕ x = x
Или значками:
~~x = x
Это похоже на смену знака в арифметике: -(-4) = 4. “Два минуса дают плюс”. В логике та же ситуация с отрицанием: два отрицания дают утверждение.
Например. Пусть дано высказывание “Вася украл яблоко”. Его истинность равна x. Построим отрицание: “Неправда, что Вася украл яблоко” или просто “Вася не крал яблоко”. У этого высказывания истинность равна ~x. И еще одно отрицание: “Неправда, что Вася не крал яблоко”. У этого высказывания истинность равна ~~x.
Итого:
Tr(“Вася украл яблоко”) = x
Tr(“Вася не крал яблоко”) = ~x = НЕ x
Tr(“Неправда, что Вася не крал яблоко”) = ~~x = НЕ НЕ x
Допустим, Вася на самом деле спер то яблоко. Значит, первое высказывание истинно, x = true. Тогда второе высказывание ложно: ~x = ~true = false. Третье высказывание истинно: ~~x = ~~true = ~false = true. По закону двойного отрицания можно было написать короче: ~~x = x = true.
Очень просто, но даже тут могут быть зарыты “грабли”. Чаще всего грабли выскакивают, когда вместо простого отрицания высказывание отвергается как-то более мягко. Например:
Том: Вася украл яблоко.
Джерри: Не знаю, не знаю...
Том: Хочешь сказать, он не крал.
Джерри: Ну... не знаю...
Том: Ага, значит, украл.
Здесь Джерри вместо отрицания выражает сомнение, а Том пытается преувеличить его сомнения вплоть до отрицания. Джерри хочет сказать, что истинность высказывания для него остается величиной неизвестной: x. Том же требует от него определенности: x = true или x = false?
Это опять похоже на обычную арифметику. Переменная x может быть равна 0 или 1 или 2... но может и остаться неизвестной. Заметьте, что неизвестность - это не число. И в двузначной логике неизвестность - это вовсе не третье значение, помимо false и true, это просто неизвестность, под которой скрывается либо true, либо false. Более того: неизвестность вовсе не одна, их может быть сколько угодно: x, y, z... Опять же, как в арифметике.
Вот тот же диалог с пометками для значения x - кто что утверждает (знаком вопроса я обозначил неизвестность).
1. Том: Вася украл яблоко. ( x = true )
2. Джерри: Не знаю, не знаю... ( x = ? )
3. Том: Хочешь сказать, он не крал. ( ~x = true )
4. Джерри: Ну... не знаю... ( ~x = ? )
5. Том: Ага, значит, украл. ( x = true )
Здесь видно, в чем ошибка Тома: он пытается делать выводы из высказываний, для которых не определено x. Переменная x неизвестна, а пока она неизвестна, нельзя вычислить x, ~x, ~~x.
Во второй строке Джерри говорит, что x = ?. В третьей строке Том воспринимает “?” как false и начинает делать выводы: x = false, значит ~x = true.
Во четвертой строке Джерри говорит, что ~x = ?. В пятой строке Том воспринимает “?” как false и начинает делать выводы: ~x = false, значит ~~x = true, но также по закону двойного отрицания ~~x = x, то есть x = true.
Чтобы избежать этой ошибки надо соблюдать простой принцип: внимательно присматриваться к тем фразам, которые похожи на отрицания: нет ли там каких-нибудь оговорок, вроде “я не уверен” или “не совсем”.
Еще пример:
Том: Вася украл яблоко ( x = true )
Джерри: Да ладно? ( x = ? )
Том: Ах, ты мне не веришь?! Хочешь сказать, я вру!? ( x = false )
Классика жанра, так сказать. Джерри всего лишь высказал сомнение в том, что x определено. А Том преувеличил сомнение вплоть до отрицания.
Ну и последний пример, характерный для споров верующих против неверующих:
Том: Ты веришь в Зевса, что он есть?
Джерри: Нет.
Том: Ага, значит, ты веришь, что Зевса нет?
Джерри: Нет.
Том: Противоречие, однако!
Тут фокус похитрее. Здесь имеются две неизвестных: x и y. Первая (x) определяет одну из возможностей: веришь / не веришь. Это действительно взаимоисключающие вещи. Вторая (y) определяет Зевс есть / Зевса нет. Это тоже взаимоисключающие вещи.
А что сказал Том? А он сказал нечто замысловатое, где сочетаются x и y. В логике для этого используются предикаты или модальности (о которых речи не было). В общем, это какая-то логическая функция от двух переменных: f(x, y), которая описывает состояние веры в Зевса у Джерри. Теперь тот же диалог с пометками:
Том: Ты веришь в Зевса, что он есть? ( f(true, true) = true )
Джерри: Нет. ( f(true, true) = false )
Том: Ага, значит, ты веришь, что Зевса нет? ( f(true, false) = false )
Джерри: Нет. ( f(true, false) = false )
Том: Противоречие, однако!
Теперь лучше видно, что происходит. Джерри сказал две вещи:
f(true, true) = false
f(true, false) = false
Между этими двумя записями нет никакого противоречия, как между такими двумя записями из школьной алгебры:
sin(0*1) = 0
sin(0*0) = 0
В применении к жизни, такая ситуация может означать (например), что Джерри вообще никогда не задумывался про Зевса и потому не сформировал никакого верования насчет него. И это - далеко не единственная возможность.