В логике отрицание , также называемое логическим не или логическим дополнением , — это операция , которая переводит предложение в другое предложение «не », что означает « не является истинным», записанное , или . Интуитивно оно интерпретируется как истинное, когда является ложным, и ложное, когда является истинным. [1] [2] Таким образом, отрицание — это унарная логическая связка . Оно может применяться как операция над понятиями , предложениями , значениями истинности или семантическими значениями в более общем смысле. В классической логике отрицание обычно отождествляется с функцией истинности , которая переводит истину в ложность (и наоборот). В интуиционистской логике , согласно интерпретации Брауэра–Гейтинга–Колмогорова , отрицание предложения — это предложение, доказательства которого являются опровержениями .
Операндом отрицания является отрицание [3] или отрицание [ 3] .
Классическое отрицание — это операция над одним логическим значением , обычно значением предложения , которая производит значение true , когда его операнд ложен, и значение false , когда его операнд истинен. Таким образом, если утверждение истинно, то (произносится как «не P») будет ложным; и наоборот, если истинно, то будет ложным.
Таблица истинности выглядит следующим образом:
Отрицание можно определить в терминах других логических операций. Например, можно определить как (где — логическое следствие , а — абсолютная ложь ). И наоборот, можно определить как для любого предложения Q (где — логическая конъюнкция ). Идея здесь в том, что любое противоречие ложно, и хотя эти идеи работают как в классической, так и в интуиционистской логике, они не работают в паранепротиворечивой логике , где противоречия не обязательно ложны. В классической логике мы также получаем еще одно тождество, можно определить как , где — логическая дизъюнкция .
Алгебраически классическое отрицание соответствует дополнению в булевой алгебре , а интуиционистское отрицание — псевдодополнению в гейтинговой алгебре . Эти алгебры обеспечивают семантику для классической и интуиционистской логики.
Отрицание предложения p обозначается по-разному, в различных контекстах обсуждения и областях применения. В следующей таблице приведены некоторые из этих вариантов:
Обозначение — польское .
В теории множеств также используется для обозначения «не входит в множество»: это множество всех членов U , которые не являются членами A.
Независимо от того, как это обозначено или символизировано , отрицание можно прочитать как «это не тот случай, когда P », «не то, чтобы P » или, как правило, проще как «не P ».
Чтобы сократить количество необходимых скобок, можно ввести правила приоритета : ¬ имеет более высокий приоритет, чем ∧, ∧ выше, чем ∨, а ∨ выше, чем →. Так, например, является сокращением от
Вот таблица, показывающая наиболее часто используемый приоритет логических операторов. [5]
В системе классической логики двойное отрицание, то есть отрицание отрицания предложения , логически эквивалентно . Выражаясь символически, . В интуиционистской логике предложение подразумевает свое двойное отрицание, но не наоборот. Это отмечает одно важное различие между классическим и интуиционистским отрицанием. Алгебраически классическое отрицание называется инволюцией периода два.
Однако в интуиционистской логике более слабая эквивалентность имеет место. Это потому, что в интуиционистской логике является просто сокращением для , и мы также имеем . Составление этого последнего следствия с тройным отрицанием подразумевает, что .
В результате, в пропозициональном случае предложение классически доказуемо, если его двойное отрицание интуиционистски доказуемо. Этот результат известен как теорема Гливенко .
Законы де Моргана предоставляют способ распределения отрицания по дизъюнкции и конъюнкции :
Пусть обозначает логическую операцию xor . В булевой алгебре линейной функцией называется такая функция, что:
Если существует , , для всех .
Другой способ выразить это — каждая переменная всегда имеет значение в истинностном значении операции, или она никогда не имеет значения. Отрицание — это линейный логический оператор.
В булевой алгебре самодвойственная функция — это функция такая, что:
для всех . Отрицание — самодвойственный логический оператор.
В логике первого порядка есть два квантификатора, один из которых является квантификатором всеобщности (означает «для всех»), а другой — квантификатором существования (означает «существует»). Отрицанием одного квантификатора является другой квантификатор ( и ). Например, с предикатом P как « x смертен» и областью x как совокупностью всех людей, означает «человек x среди всех людей смертен» или «все люди смертны». Его отрицанием является , что означает «существует человек x среди всех людей, который не смертен», или «существует кто-то, кто живет вечно».
Существует ряд эквивалентных способов формулировки правил для отрицания. Один из обычных способов формулировки классического отрицания в естественной дедукции — взять в качестве примитивных правил вывода введение отрицания (из вывода к и , infer ; это правило также называется reductio ad absurdum ), устранение отрицания (из и infer ; это правило также называется ex falso quodlibet ) и устранение двойного отрицания (из infer ). Правила для интуиционистского отрицания получаются тем же способом, но исключая устранение двойного отрицания.
Введение отрицания гласит, что если из абсурда можно сделать вывод, то этого не должно быть (т. е. он ложный (классически) или опровержимый (интуиционистски) и т. д.). Устранение отрицания гласит, что из абсурда следует что-либо. Иногда устранение отрицания формулируется с использованием примитивного знака абсурда . В этом случае правило гласит, что из и следует из абсурда. Вместе с двойным устранением отрицания можно вывести наше изначально сформулированное правило, а именно, что из абсурда следует что-либо.
Обычно интуиционистское отрицание определяется как . Тогда введение и устранение отрицания являются всего лишь частными случаями введения импликации ( условного доказательства ) и устранения ( modus ponens ). В этом случае необходимо также добавить в качестве примитивного правила ex falso quodlibet .
Как и в математике, отрицание используется в информатике для построения логических утверждений.
if ( ! ( r == t )) { /*...операторы, выполняемые, когда r НЕ равно t...*/ }
Восклицательный знак " !
" обозначает логическое НЕ в языках B , C и языках с синтаксисом, вдохновленным C, таких как C++ , Java , JavaScript , Perl и PHP . " NOT
" — оператор, используемый в ALGOL 60 , BASIC и языках с синтаксисом, вдохновленным ALGOL или BASIC, таких как Pascal , Ada , Eiffel и Seed7 . Некоторые языки (C++, Perl и т. д.) предоставляют более одного оператора для отрицания. Несколько языков, таких как PL/I и Ratfor, используют ¬
для отрицания. Большинство современных языков позволяют сократить приведенный выше оператор с if (!(r == t))
до if (r != t)
, что иногда позволяет, когда компилятор/интерпретатор не может его оптимизировать, ускорять программы.
В информатике также есть побитовое отрицание . Оно берет заданное значение и переключает все двоичные единицы на нули, а нули на единицы. Смотрите побитовую операцию . Это часто используется для создания дополнения до единицы или " ~
" в C или C++ и дополнения до двух (просто упрощенного до " -
" или знака "минус", поскольку это эквивалентно получению арифметического отрицательного значения числа), поскольку по сути создает противоположность (эквивалент отрицательного значения) или математическое дополнение значения (когда оба значения складываются, они создают целое).
Чтобы получить абсолютное (положительный эквивалент) значение заданного целого числа, будет работать следующее, поскольку " -
" изменяет его с отрицательного на положительное (оно отрицательное, потому что " x < 0
" возвращает значение true):
беззнаковое целое число abs ( int x ) { если ( x < 0 ) вернуть -x ; иначе вернуть x ; }
Чтобы продемонстрировать логическое отрицание:
беззнаковое целое число abs ( int x ) { если ( ! ( x < 0 ) ) вернуть x ; иначе вернуть -x ; }
Инвертирование условия и изменение результатов на противоположные создает код, который логически эквивалентен исходному коду, т.е. будет иметь идентичные результаты для любых входных данных (в зависимости от используемого компилятора фактические инструкции, выполняемые компьютером, могут отличаться).
В языке C (и некоторых других языках, произошедших от C) двойное отрицание ( !!x
) используется как идиома для преобразования x
в каноническое логическое значение, т. е. целое число со значением 0 или 1 и никаким другим. Хотя любое целое число, отличное от 0, является логически истинным в языке C, а 1 не является чем-то особенным в этом отношении, иногда важно гарантировать, что используется каноническое значение, например, для печати или если число впоследствии используется для арифметических операций. [6]
Конвенция использования !
для обозначения отрицания иногда всплывает в обычной письменной речи, как компьютерный сленг для not . Например, эта фраза !voting
означает «не голосует». Другим примером является фраза !clue
, которая используется как синоним для «no-clue» или «clueless». [7] [8]
В семантике Крипке , где семантические значения формул являются множествами возможных миров , отрицание можно понимать как дополнение теории множеств [ требуется ссылка ] (см. также семантику возможных миров для получения дополнительной информации).