Предположение об уникальности имён
Предположение об уникальности имён (англ. Unique Name Assumption, сокращённо UNA) — это упрощающее предположение, используемое при разработке некоторых языков для онтологий и дескриптивных логик. В логических системах, в которых принято это предположение, различные имена всегда обозначают различные сущности в рассматриваемом мире.
Формальное определение и связь с другими допущениями
В логике первого порядка предположение об уникальности имён формализуется через предикат равенства (неравенства). Для любых различных констант и вводится аксиома (что эквивалентно ). Для более сложных термов аксиоматика включает:[1]
Введение UNA строго ограничивает множество допустимых интерпретаций: из рассмотрения исключаются любые интерпретации, в которых функция интерпретации отображает разные константы или основные термы в один и тот же элемент домена[1].
Предположение об уникальности имён тесно связано с другими логическими допущениями, применяемыми в системах представления знаний:
- Предположение об открытом мире (OWA): то, что неизвестно как истинное, считается неизвестным. Системы, основанные на OWA, по умолчанию не включают UNA, однако это допущение может быть добавлено в них вручную[2].
- Предположение о закрытом мире (CWA): то, что неизвестно как истинное, считается ложным. Системы, использующие CWA, по умолчанию включают UNA[2].
Применение
Предположение об уникальности имён по-разному применяется в различных системах и областях.
Семантическая паутина и онтологии
В области формальных логических систем представления знаний, предположение об уникальности имён является следствием предположения о замкнутом мире, тогда как оно, как правило, не выполняется в рамках предположения об открытом мире. Например, в сценариях семантической паутины, одна и та же концепция может присутствовать в различных онтологиях под разными именами; поэтому UNA обычно не предполагается[3].
В более специфических случаях, даже при принятии предположения об открытом мире, UNA может быть необходима для обеспечения важных вычислительных свойств. Так, например, это характерно для многих языков семейства DL-Lite[4][5]. Профиль OWL 2 QL, чтобы поддерживать отсутствие UNA (в соответствии со стандартной семантикой OWL) и одновременно обеспечивать хорошие вычислительные свойства, вынужден отказаться от функциональности ролей и атрибутов[4][6].
Реляционные базы данных
В реляционных базах данных (SQL) принцип допущения об уникальности имён (UNA) означает, что два различных идентификатора ссылаются на два разных объекта реального мира. SQL-системы строго соблюдают это допущение, идентифицируя каждую запись с помощью уникальных значений в определённом наборе столбцов. Механизмы реализации UNA опираются на первичные ключи, которые гарантируют уникальность записи и не допускают дубликатов, а также на уникальные индексы и ограничения, обеспечивающие уникальность данных в дополнительных столбцах[7].
Любые попытки нарушить ограничения целостности (например, вставить дублирующийся идентификатор) немедленно отклоняются базой данных с выдачей ошибки. Если же механизмы UNA игнорируются (например, при намеренном отключении уникального индекса), в таблицу могут быть добавлены дубликаты. В отличие от систем без UNA, SQL-базы не умеют логически объединять такие записи, что приводит к нарушению целостности данных, появлению скрытых дубликатов и ошибкам при последующих попытках включить или перестроить уникальный индекс.
Логическое программирование
В языках логического программирования (таких как Prolog и Datalog) допущение об уникальности имён не является встроенным правилом базовой семантики. Оно симулируется через механизм отрицания как сбоя (Negation as Failure) при неудаче унификации[1].[8].
Графы знаний и нейросимволический ИИ
В современных графах знаний часто отказываются от допущения об уникальности имён (UNA) в пользу отсутствия такого допущения (No Unique Name Assumption, NUNA). Однако в нейросимволическом ИИ UNA активно применяется как полезное ограничение для обучения векторных представлений графов знаний[9].
Примеры и последствия
Считать предположение об уникальности имён выполняющимся означает, например, следующее:
- если для некой сущности с именем «свинья» определено свойство «свинья розового цвета», это не даёт никакой информации о цвете поросяти, хотя в реальности эти слова — синонимы. Следовательно, на вопрос «поросёнок розовый?» ответ будет ложь: во-первых, не определено наличие сущности с именем «поросёнок» и информации о её цвете; во-вторых, было бы некорректно использовать разные имена для одного и того же объекта. Существование синонимов не предполагается — их необходимо явно определять, например как свойства (имя: «Свинья», синоним_1: «Поросёнок», синоним_2: «Sus scrofa domesticus» и т. д.), при этом уникальный идентификатор выбирается один;
- если в списке пассажиров авиарейса имя предъявившегося на регистрацию пассажира не обнаружено, даже если он использует другое, хотя и эквивалентное имя (например, на другом языке), и при условии корректности и полноты списка, то такой человек не считается одним из пассажиров;
- в списке авиапассажиров два пассажира не могут иметь одинаковый идентификатор (поэтому неправильно использовать лишь имя и фамилию как уникальные идентификаторы для бронирования авиабилета из-за частых случаев однофамильцев): не допускается определение двух или более сущностей с разными именами, если они тождественны.
- В системах логического вывода принятие UNA блокирует вывод о тождестве объектов: два разных имени не могут быть признаны одной и той же сущностью, и любые утверждения об их равенстве расцениваются как логическое противоречие[1].
- При проверке числовых ограничений (например, максимальной кардинальности) или функциональных свойств UNA предотвращает нежелательное слияние индивидов. Например, если задано ограничение, что человек может состоять в браке не более чем с одним человеком, а в базе знаний указано, что Питер женат на Энн и на Мэри, система с UNA зафиксирует нарушение ограничений. В системах без UNA (например, в OWL) это не вызовет ошибки: логический выводчик автоматически отождествит Энн и Мэри, сделав вывод, что это один и тот же человек.
В OWL
В OWL (Web Ontology Language), семантика которого базируется на дескриптивных логиках[3], предположение об уникальности имён не подразумевается, но имеются специальные конструкции для явного задания тождественности или различия между сущностями.
Два следующих утверждения соответственно выражают тождественность или различие двух имён[10][11]:
owl:sameAsowl:differentFrom
Для массового задания различия индивидов и имитации допущения об уникальности имён в OWL предусмотрены дополнительные конструкции:
owl:AllDifferent(в функциональном синтаксисе OWL 2 —DifferentIndividuals) — класс или аксиома, утверждающая, что все индивиды в заданном списке попарно различны;owl:distinctMembers— свойство, связывающее экземплярowl:AllDifferentсо списком различных индивидов;NegativeObjectPropertyAssertion— аксиома, утверждающая, что заданный индивид не связан с другим индивидом определённым объектным свойством.
Хотя использование owl:sameAs обычно рекомендуется для обеспечения тесной связанности между различными базами знаний, в литературе существуют критические замечания относительно злоупотребления этим свойством, поскольку оно нередко применяется в иных смыслах — таких как «похож на», «отображает» и др. Классическая логическая интерпретация тождества часто оказывается слишком строгой, так как сущности могут совпадать лишь в определённых контекстах[12]. В качестве альтернатив предлагаются контекстуализированная семантика[12] и использование предикатов (например, skos:closeMatch) для обозначения частичного совпадения или схожести[13].
В OWL 2 свойство owl:sameAs по определению является симметричным и транзитивным, представляя собой отношение эквивалентности. Благодаря этому логический вывод работает в обе стороны, и для корректного связывания сущностей явное дублирование утверждения в обоих направлениях не требуется.