В новом ТОМе ввели отношения, но не было написано ни слова о том как их использовать.
Здесь я попытаюсь немного развеять непонимание всех этих непонятных "флагов" транзитивность, симметричность, рефлексивность и др.
На самом деле всё это идет из логики бинарных отношений и если не лениться, то все определения можно найти в википедии. Но каким же боком все эти понятия из высшей математики относятся к парсерной платформе под названием ТОМ2 ? Попробуем разобраться.
Отношение один-к-одному/один-ко-многим/многие-к-одному/многие-ко-многим - (читайте ниже сообщение ASBer-а) Очень похоже на отношения в базах данных.
Транзитивность - Определение из википедии: В математике бинарное отношение R на множестве X называется транзитивным, если для любых трёх элементов множества a, b, c выполнение отношений aRb и bRc влечёт выполнение отношения aRc.
Примеры из жизни:
Отношение [объект больше объекта] транзитивно, т.к. если [земля больше яблока], а [яблоко больше горошины], то однозначно [земля больше горошины]. И так для любого объекта.
Пример не транзитивного отношения: [человек мама человека]. Ведь если [Маша мама Лены], а [Лена мама Кати], то [Маша не мама Кати], она её бабушка.
Симметричность/Антисимметричность - Определение из википедии: В математике бинарное отношение R на множестве X называется симметричным, если для каждой пары элементов множества (a, b) выполнение отношения aRb влечёт выполнение отношения bRa.
Тут понятно даже из названия: отношение симметрично, если оно остаётся верным после перемены элементов местами.
Например, отношение [человек брат человека] симметрично, т.к. если [Петя брат Вити], то и [Витя брат Пети].
В пример антисимметричного отношения можно взять пример из предыдущей группы [человек мама человека]. Сами разберётесь почему?
Рефлексивность/Антирефлексивность - Определение из википедии: В математике бинарное отношение R на множестве X называется рефлексивным, если всякий элемент этого множества находится в отношении R с самим собой.
Если честно, пример рефлексивного отношения найти мне оказалось не так уж просто.
Могу привести лишь не очень понятное отношение [объект равен объекту]. Т.к. [кружка равна кружке] (т.е. самой себе), [5 = 5] и т.д.
Гораздо больше идёт на ум антирефлексивных отношений: [человек сын человека], [объект содержит объект]...
Что-бы закрепить прочитанное разберём несколько отношений непосредственно из демо-игры "to_pawn":
отношение объект содержит объект, 1 ко многим, транзитивно, антисимметрично, антирефлексивно.
Транзитивно, потому-что если [комната содержит сундук], а [сундук содержит алмазы], то [комната содержит алмазы].
Антисимметрично, т.к. если [комната содержит сундук], то [сундук не содержит комнату]
Антирефлексивно: [сундук не содержит сундук], [алмазы не содержат алмазы] и т.д.
отношение место содержит место, 1 ко многим, рефлексивно, антисимметрично
Здесь не указано что отношение транзитивно, значит оно не транзитивно. Хотя если посмотреть, то отношение [место содержит место] должно быть транзитивным. Сравним хотя-бы тройки мест [улица-дом-комната], или [дом-коридор-лифт]. Ведь если [дом содержит коридор], а [коридор содержит лифт], значит и [дом содержит лифт]. Хотя не знаю, может это будет противоречить логике локаций в ТОМ2, так-что не буду настаивать.
Рефлексивно - не знаю как это получилось, но в коде так и прокомментировано: "рюмочная содержит рюмочную, а улица содержит улицу - банально, но это так."
Антисимметрично. Аналогично примеру из предыдущего отношения.
Я намеренно опустил описание отношений один-к-одному, один-ко-многим и другие из этой же группы, т.к. не знаю по каким принципам они подставляются.
Не смотря на всю ясность определений бинарных отношений, в тех пяти примерах из to_pawn мы уже видим множество отклонений от здравого смысла. И в них наверняка скрыт какой-то свой смысл. Так-что...
Отредактировано Alexandr (2014-01-16 17:40:14)