|
| ||||||||||||
| ||||||||||||
|
2006 г.
Гедель, Рассел, Кодд: Рекурсивная золотая чехардаК. Дж. Дейт Оригинал: Gödel, Russell, Codd: A Recursive Golden Crowd В этой небольшой и изящной статье Дейт обсуждает возможности формулировки неразрешимых выражений средствами языков баз данных. Скорее всего, статья покажется тривиальной математическим логикам, но многие программисты смогут узнать о неожиданных потенциальных трудностях, с которыми можно столкнуться при работе с базами данных. Статья является первой из трех статей цикла "Обсуждение некоторых критических замечаний в адрес Третьего Манифеста" С.Д. Кузнецов Автор просит прощения у Дугласа Хофстадтера и его книги
АннотацияЭта статья является ответом на некоторые критические замечания, которые были сделаны в адрес (a) Третьего Манифеста – см. [4] – и (b) языка Tutorial D, который используется в [4] для иллюстрации идей Третьего Манифеста. Эти критические замечания появились в [6] и могут быть кратко изложены следующим образом: В Третьем Манифесте вообще и в Tutorial D, в частности, допускается построение выражений, которые являются парадоксальными и потому неразрешимыми.
Парадокс ЭпименидаРассмотрим следующий пример:
Вероятно, вы уже поняли, что этот пример воспроизводит в реляционной форме известный парадокс Эпименида. И конечно, корнем проблемы является ссылка на самого себя: предикат P ссылается сам на себя. На тот случай, если вам неудобно полагаться на аргументы, основанные на специальных отношениях TABLE_DEE и TABLE_DUM, позвольте привести другой пример, иллюстрирующий тот же случай. Этот пример представляет собой существенно упрощенный вариант примера, приведенного Дэвидом Макговерном (David McGoveran) и опубликованного мной в колонке журнала DBP&D [2]. Пусть r – это отношение с единственным атрибутом N типа INTEGER, и пусть предикатом для r является «Мощность r есть N»♦. Если r пусто, то мощность r равна нулю, и, следовательно, в r должен входить кортеж t = TUPLE {N 0}, и поэтому r не должно быть пусто. Но если кортеж t = TUPLE {N 0} действительно входит в r, то r не является пустым, и, следовательно, кортеж t не должен входить в r. То есть снова имеется некоторая разновидность того же парадокса. ОбсуждениеВ оставшейся части статьи я возвращаюсь к примеру с участием TABLE_DEE и TABLE_DUM. В связи с этим примером я говорил, что P является предикатом, а на самом деле еще и высказыванием – но так ли это в действительности? По определению, высказывание – это утверждение, которое однозначно является либо истинным, либо ложным. (Более точно, это утверждение, в котором делается предположение, однозначно являющееся истинным или ложным.) Но очевидно, что P не является ни истинным, ни ложным – потому что, если оно истинно, то оно ложно, и наоборот, – так что, возможно, я был не прав, назвав его в предыдущем разделе высказыванием. Однако более важно то, что, как мне кажется, нам не следует спорить о том, является ли P предикатом, или, более конкретно, высказыванием; нам нужно решить, трактуется ли он в таком качестве в нашей формальной системе – системе, о которой идет речь. Если такая трактовка допускается, мы имеем проблему. Однако заметим следующее:
Скорее, проблема (если здесь вообще имеется проблема) связана с логикой. Другими словами, либо в логике допускается P в качестве предиката, либо не допускается. Если допускается, то имеется проблема, связанная с логикой. Если не допускается, то нет проблемы в связи с логикой, а проблемы (если они имеются) связаны с реляционной моделью. С большим основанием Третий Манифест и Tutorial D здесь вообще не при чем. Замечание: Насколько я понимаю, Рассел в своей теории типов был вынужден принять недопустимость P и других подобных утверждений в качестве предикатов. Однако, даже если согласиться с этим, мое утверждение остается неизменным: если в этой области и существует проблема, она является внутренней проблемой – она не связана с какой-либо ошибкой в Третьем Манифесте или Tutorial D. Замечания по поводу Tutorial DПозвольте мне ненадолго сконцентрироваться на Tutorial D. Можно было бы подумать, что следующая конструкция является формулировкой парадокса Эпименида в терминах Tutorial D (и в этом случае решить, что проблема кроется именно в этом языке): VAR R { } KEY { } ; CONSTRAINT EPIMENIDES COUNT ( R ) = 0 ; Более конкретно, можно было бы подумать, что ограничение EPIMENIDES является формальным выражением предиката P («Отсутствуют истинные инстанциации предиката P», или, эквивалентно, «Число истинных инстанциаций предиката P равняется нулю»). Но это не так. И причина состоит не в том, что к ограничениям не применима гипотеза о замкнутом мире. В гипотезе о замкнутости мира (говоря вольно) утверждается, что relvar R в данный момент времени должна содержать те и только те кортежи, которые в этот момент удовлетворяют предикату переменной R. Но в Tutorial D не поддерживается и не может поддерживаться знание предикатов relvar; в этом языке могут быть известны только ограничения relvar. И нет – и не может быть – такого требования, что relvar R в данный момент времени содержит те и только те кортежи, которые удовлетворяют в этот момент ограничениям, применимым к R. Так что тот факт (в примере), что relvar R всегда является пустой, сам по себе не приводит ни к какому парадоксу. Попробуем подойти по-другому. Вот еще одна попытка сформулировать парадокс Эпименида в терминах Tutorial D: VAR R { } KEY { } ; CONSTRAINT EPIMENIDES IF COUNT ( R ) = 1 THEN COUNT ( R ) = 0 AND IF COUNT ( R ) = 0 THEN COUNT ( R ) = 1 ; Здесь ограничение EPIMENIDES логически эквивалентно следующему: Если в relvar R существует кортеж, то relvar R должна быть пустой, а если relvar R является пустой, то в ней должен существовать кортеж. Другими словами, это ограничение является противоречием. (Заметьте, пожалуйста, что я использую здесь термин противоречие в его формальном логическом смысле, имея в виду предикат, любой вызов которого гарантированно приводит к результату FALSE вне зависимости от того, какие аргументы поставлены в соответствие его параметрам.) Но если ограничение является противоречием, то, прежде всего, отсутствует – или, по крайней мере, должна отсутствовать – какая-либо возможность добавления его к системе! Более точно, если какой-либо пользователь пытается определить некоторое новое ограничение для некоторой базы данных, то система, прежде всего, должна проверить, что база данных в настоящее время удовлетворяет этому ограничению. Если эта проверка не удается, то ограничение, очевидно, должно быть отброшено; и если это ограничение является противоречием, то база данных ни коем образом не может удовлетворять ему в настоящее время. Конечно, здесь я в целях обсуждения предполагаю, что система действительно может обнаружить тот факт, что база данных не удовлетворяет некоторому предлагаемому ограничению. В сопутствующей статье [1] обсуждается, что происходит при недействительности этого предположения. Однако для полноты я привожу здесь краткий набросок того, что должно происходить в правильно организованной системе, когда некоторый пользователь пытается определить некоторое новое ограничение базы данных DC:
Замечание по поводу Третьего МанифестаХотя парадокс Эпименида по своей сути слишком прост для иллюстрации этого факта, в общем случае идея «предикатов, ссылающихся на предикаты» в реляционной терминологии соответствует отношениям, значениями атрибутов которых являются отношения (relation-valued attributes, RVA). В частности, непосредственно самоссылащийся предикат – т.е. предикат, включающий прямую ссылку на самого себя – соответствует отношению некоторого типа T, содержащему атрибут того же типа T. Такой тип отношения T называется рекурсивно определенным типом. В [4] по этому поводу говорится следующее:♦♦ <цитата>
</цитата> Мне кажется, что аргументы, представленные в настоящей статье, делают желательным усиление приведенной позиции. Более точно, теперь я полагаю, что рекурсивно определяемые типы отношений следует явно запретить. Вот что следует из этой позиции:
Литература
* В этой книге Дуглас Хофстадтер (Douglas Hofstadter) исследует аспекты творчества Эшера, относящиеся к теории информации и искусственному интеллекту. Дейт приносит извинение за использование идеи названия книги Gödel, Escher, Bach: An Eternal Golden Braid (совсем в другом контексте). (Прим. переводчика) ♦ Если мы назовем этот предикат Q, то эквивалентным образом его можно сформулировать следующим образом: «Имеется ровно N истинных инстанциаций предиката Q» – формулировка, которая подчеркивает, что предикат ссылается сам на себя, и позволяет провести параллель с предыдущим примером. ♦♦ Замечу, что в этой цитате говорится как о рекурсивных типах, определяемых косвенным образом, так и о тех, которые определяются напрямую. (Я немного изменил текст, но не затронул его смысл в каком-либо важном аспекте. Вы может игнорировать упоминание «возможного представления», если не знаете, что это такое.) |
|
CITForum © 1997–2025