Парадокс Рассела из теории множеств -- довольно известная штука. Его легко можно объяснить загадкой:
В некой деревне живёт брадобрей, который бреет всех жителей деревни, которые не бреются сами, и только их. Бреет ли брадобрей сам себя?
Любой ответ на вопрос будет некорректным. Определение чего-либо через самого себя может привести к хаосу.
Есть другой хороший пример из реальной жизни: Парадокс толерантности. Идея в следующем: Если общество слишком толерантно и позволяет нетолерантным идеям (к примеру нацистским и исламистским) свободно распространяться, то культура толерантности будет уничтожена. Предлагаемое решение: отказ от толерантности к нетолерантным идеям. Нетолерантная толерантность.
Если пользоваться таким решением, то также как и в примере с брадобреем, толерантность будет определена через саму себя. Легко представить что это приведёт к хаосу.
Если когда-то к нетолерантным идеям относили лишь нацистские, то сейчас нетолерантным можно назвать почти кого угодно. Например какого-нибудь популярного комика публично задающего каверзные вопросы.
В языках программирования есть похожая проблема. Во многих динамических языках есть процедура eval (evaluate). Eval в рантайме принимает произвольный код в виде текста, и выполняет его.
Другими словами: вызов eval может перезаписывать функции и классы в работающей программе. Может даже перезаписать ту самую функцию что её вызвала. Множество функций определено через само себя.
Eval -- очень мощный инструмент, который позволяет писать программы что пишут сами себя. Однако небрежное использования этого инструмента может легко привести к хаосу. Поведение программы может кардинально измениться в любой момент.
Окей, и как же быть? Как не попасть в эту ловушку? Похоже что нужно разорвать цикл в определениях и выразить их деревом (иерархией).
- В теории множеств есть понятие класса (набор множеств), которое позволяет упорядочить определения. Позволяет избежать проблем с брадобреями.
- Нетолерантной толерантности наверное можно избежать если найти другое решение для парадокса толерантности. Например, быть толерантным ко всем идеям, даже к нацистским и исламистским. Проблему уничтожения культуры толерантности решать каким-то другим способом.
- Проблему с eval также можно решить через введение иерархии. К примеру, запретить программе перезаписывать часть самой себя, позволять это делать только по команде извне.