Saturday, May 01, 2010

Парадокс лжеца

Парадоксом лжеца называется следующее простое утверждение:
Это утверждение ложно
Парадоксальность в том, что невозможно решить, истинно оно или ложно. В самом деле, допустим, что оно истинно. Т.е. действительно это утверждение ложно. Т.е. оно ложно. Т.е. мы начали с предположения, что оно истинно, и пришли к выводу, что оно ложно. Противоречие! То же самое получится, если мы предположим, что это утверждение ложно. Т.е. неправда, что это утверждение ложно. Значит, оно истинно. Т.е. мы начали с предположения, что оно ложно, и пришли к выводу, что оно истинно. Опять противоречие!
 
Получается, что как ни крути, а это утверждение нельзя назвать ни истинным, ни ложным. Последние две с половиной тысячи лет философы не могут решить, как же это понимать. Я же попробую предложить свое объяснение.

Я вижу объяснение в следующем. Не всякий набор слов является осмысленным утверждением, которому можно приписать истинность или ложность. Парадокс лжеца только похож на осмысленное утверждение, - и в этом подвох! - на самом же деле является бессмысленным набором слов. Проблема в ссылке на "это" утверждение, которое еще не определено. Сейчас я постараюсь объяснить это более наглядно. 

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

bool liars_paradox()
  return liars_paradox() == false;
}

Видно, что определение этой функции содержит бесконечную рекурсию. Определение ссылается само на себя. Поэтому функция liars_paradox никогда не возвратит результата true или false. Соответственно, парадокс лжеца не является "утверждением", о котором имело бы смысл говорить, истинно оно или ложно.

Кстати, столь же парадоксальной является фраза "Это утверждение истинно". Можно предположить, что оно истинно - это ничему не противоречит. Но с тем же успехом можно предположить, что оно ложно - и это тоже ничему не противоречит! Т.о. эта фраза одновременно и истинна и ложна, что, конечно, эквивалентно тому, что она не истинна и не ложна, как парадокс лжеца (истинна - значит не ложна, ложна - значит не истинна). На самом деле, конечно, эта фраза столь же бессмысленна, и по той же самой причине, что и парадокс лжеца.

Аналогия с функциями позволяет также прояснить, почему парадокс лжеца так похож на осмысленное утверждение. Можно взять произвольный набор слов, скажем "черный вчера наверно", и никто и не подумает спрашивать, истинно ли это "утверждение" или ложно. Но парадокс лжеца настолько похож на осмысленное утверждение, что такой вопрос задается. Дело же в том, что фраза "черный вчера наверно" просто синтаксически неверна, и этот "syntax error" легко определяется каким-то аналогом компилятора в нашем мозгу. Парадокс же лжеца содержит семантическую ошибку, т.е. ошибку времени выполнения, найти которую, как известно любому программисту, гораздо сложнее.

No comments: