Объект типа “историческая дата”
Ю.Б.Кабаков
Введение
1. Структура объекта типа "Историческая дата"
Объект типа "Историческая дата" может представлять собой единичную дату (например, "12 января 1955 года” или "середина 19-го века"), интервал (например, "с конца 1-го тысячелетия до нашей эры до 1995 года"), или совокупность нескольких интервалов и единичных дат (например, "c 12 по 14 века, с 17 по 19 века и 22 июня 1945 года". Интервал определяется как пара единичных дат, являющихся, соответственно, началом и концом интервала. Таким образм, объект типа "Историческая дата" можно представить как D, (Db, De) либо ((Db1, De1), D2… (Dbn), (Den), где n – количество интервалов и единичных дат в объекте типа "Историческая дата". В последнем случае будем называть историческую дату сложной, а отдельные единичные даты и интервалы такой сложной исторической даты – ее компонетами.
Дополнительную сложность в работе с понятием “историческая дата” вносит то, что разные даты могут быть представлены в разных летоисчислениях. В этой работе будем считать, что все даты перед рассмотрением приведены к одному летоисчислению (григорианскому календарю). Формальное описание понятия “раньше” будет дано ниже.
Отметим, что компоненты сложной исторической даты упорядочены, конец предыдущей компоненты (сама компонента в случае единичной исторической даты) "раньше" начала следующей (самой компоненты, в случае единичной исторической даты).
Рассмотрим структуру единичной даты. Она представляет собой семерку атрибутов D=(d1, d2, d3, d4, d5, d6, p), где d1 – день, d2 – месяц, d3 – год, d4 – десятилетие, d5 – столетие, d6 – тысячелетие, p – уточнение неопределенности. Такое необычное представление даты объясняется желанием описывать часто встречающиеся на практике "размытые" исторические даты, например, "середина 19-го века", "конец 30-х годов 20-го века" и т.п., а также создать единый механизм записи и обработки таких дат независимо от уровня их размытости.
Атрибуты d1 – d6 некоторой даты будем называть датообразующими атрибутами. Они упорядочены в порядке возрастания индекса от младших к старшим.
Атрибуты могут иметь неопределенные (null) или определенные значения :
d1 – (1 .. 31); d2 – (1 .. 12); d3 – (0 .. 9); d4 – (0 .. 9); d5 – (0 .. 9);
d6 -может иметь произвольное целое значение, достаточное для представления всего интервала исторического времени (интервал, предоставляемый 2-байтовим целым числом (от -32 000 до 32 000) вполне достаточен);
p – ("начало", "первая четверть", "первая треть", “вторая четверть”, "первая половина", "середина", "вторая половина", “третья четверть”, "последняя треть", "последняя четверть", "конец").
Если атрибут p имеет неопределенное значение, то будем говорить, что размытость охватывает "полный период". Отметим, что атрибут d6 (тысячелетия) не может иметь неопределенного значения.
Недопустимым значением является также нулевой год – когда все компоненты года равны нулю. После 1 года до н.э. идёт 1 год н.э.
Если все датообразующие атрибуты некоторой исторической даты определены, то такая историческая дата называется точной. В противном случае историческая дата называется размытой. Значение атрибута "уточнение размытости" имеет смысл только для размытой даты и относится к младшему определенному датообразующему атрибуту, после которого нет ни одного неопределенного датообразующего атрибута. Назовем такой датообразующий атрибут атрибутом размытости. Например, историческя дата D1=(31, 12, null, null, 9, 1, "середина") обозначает 31 декабря где-то в середине 19 века, т.е. уточнение размытости "середина" относится к датообразующему атрибуту "век", который является атрибутом размытости для даты D1.
Введем понятие "уровень размытости" исторической даты. Он меньше для той исторической даты, у которой младше атрибут размытости. У точной исторической даты уровень размытости меньше, чем у любой размытой. Так, уровень размытости даты D2=(null, null, nul, 5, 8, 1, "начало") меньше, чем у D3=(null, null, null, null, 8, 1, "середина"). В данном конкретном примере D2 – “начало 1850-х гг.”, D3 – “середина 19 века”; дата D2 размыта, но в любом случае относится к определённому десятилетию; дата D3 также размыта, но о ней определенно известно только то, что она не выходит за пределы столетия. Поэтому мы говорим, что размытость даты D2 меньше, чем размытомсь даты D3.
2. Операции над объектом типа "Историческая дата"
Над объектом типа "Историческая дата" определены следующие операции:
СРАВНЕНИЕ;
ЧИСТОЕ ОБЪЕДИНЕНИЕ;
ПОГЛОЩАЮЩЕЕ ОБЪЕДИНЕНИЕ;
ПЕРЕСЕЧЕНИЕ;
РАЗНОСТЬ;
ДОПОЛНЕНИЕ;
МИНИМАКС (наиболее ранняя дата зарытия клада);
МАКСИМИН (наиболее ранняя дата основания склепа).
Опишем подробнее эти операции.
2.1. Операция СРАВНЕНИЕ
СРАВНЕНИЕ является двухместной операцией над множеством исторических дат. Возможными результатами этой операцией могут быть : "раньше", "позже", "одновременно", "включает", "включается в", "строго пересекается", "чередуются". Результат "строго пересекается" имеет место, когда для двух исторических дат D1 и D2 D1 не "включает" D2, D1 не "включается в" D2, но D1 и D2 имеют общий промежуток времени. Результат "чередуются" возникает, когда сравниваются между собой две исторические даты, каждая из которых представляет собой совокупность интервалов и эти интервалы чередуются между собой, не пересекаясь и не включаясь друг в друга. Иллюстрацией вышеперечисленных результатов может служить рисунок 1.
В дальнейшем, для краткости вместо выражения “результатом операции СРАВНЕНИЕ для исторических дат D1 и D2 является "раньше"“, будем иногда употреблять выражение "D1 "раньше" D2".
2.1.1. Аксиомы для результатов операции СРАВНЕНИЕ.
Приведем аксиомы результатов операции СРАВНЕНИЕ в словесной форме и в более строгой форме логических выражений.
Для любой исторической даты D, представляющей интервал (Db, De) Db "раньше" De.
Для любого D=(Db, De) : (Db "раньше" De)
Для результата "одновременно" имеет место рефлексивность, симметричность и транзитивность : D1 "одновременно" D1, из D1 "одновременно" D2 следует D2 "одновременно" D1, из D1 "одновременно" D2 и D2 "одновременно" D3 следует D1 "одновременно" D3.
Для любого D1 : (D1 "одновременно" D1)
Для любого D1, D2 : ((D1 "одновременно" D2) следует, что (D2 "одновременно" D1))
Для любого D1, D2, D3 : ((D1 "одновременно" D2, D2 "одновременно" D3) следует, что (D1 "одновременно" D3))
Для результатов "раньше" и "позже" имеет место антирефлексивность, антисимметричность и транзитивность : D1 не "раньше" D1, D1 не "позже" D1, из D1 "раньше" D2 следует D2 "позже" D1, из D1 "позже" D2 следует D2 "раньше" D1 из D1 "раньше" D2 и D2 "раньше" D3 следует D1 "раньше" D3, из D1 "позже" D2 и D2 "позже" D3 следует D1 "позже" D3.
Для любого D1 : (D1 ¬"раньше " D1)
Для любого D1 : (D1 ¬"позже " D1)
Для любого D1, D2 : ((D1 "раньше" D2) следует, что (D2 "позже" D1))
Для любого D1, D2 : ((D1 "позже" D2) следует, что (D2 "раньше" D1))
Для любого D1, D2, D3 : ((D1 "раньше" D2, D2 "раньше" D3)
следует, что (D1 "раньше" D3))
Для любого D1, D2, D3 : ((D1 " позже" D2, D2 " позже" D3)
следует, что (D1 " позже" D3))
Для результатов "включает" и "включается в" имеет место рефлексивность, антисимметричность и транзитивность : D1 "включает" D1, D1 "включается в" D1, из D1 "включает" D2 следует D2 "включается в" D1, из D1 "включает" D2 и D2 "включает" D3 следует D1 "включает" D3, из D1 "включается в" D2 и D2 "включается в" D3 следует D1 "включается в" D3.
Для любого D1 : (D1 "включает" D1)
Для любого D1 : (D1 "включается в" D1)
Для любого D1, D2 : ((D1 "включает" D2) следует, что (D2 " включается в " D1))
Для любого D1, D2, D3 : ((D1 "включает" D2, D2 "включает" D3)
следует, что (D1 "включает" D3))
Для любого D1, D2, D3 : ((D1 "включается в" D2, D2 "включается в" D3) следует, что (D1 "включается в " D3))
Для результатов "строго пересекается" и "чередуется" имеет место антирефлексивность и симметричность : D1 не "строго пересекается" с D1, из D1 "строго пересекается" с D2 следует, что D2 "строго пересекается с D1. D1 не "чередуется" с D1, из D1 "чередуется" с D2 следует, что D2 "чередуется" с D1.
Для любого D1 : (D1 ¬ "строго пересекается" D1)
Для любого D1, D2 : ((D1 " строго пересекается " D2) следует, что (D2 "строго пересекается" D1))
Для любого D1 : (D1 ¬ " чередуется " D1)
Для любого D1, D2 : ((D1 " чередуется " D2) следует, что (D2 " чередуется " D1))
Введем несколько аксиом для значений атрибута уточнения размытости.
"Начало" "раньше" "середины". "Начало" "раньше" "конца". "Начало" "раньше" "последней трети". "Начало" "раньше" "последней четверти". "Начало" "раньше" "второй половины".
"Первая треть" "раньше" "середины". "Первая треть" "раньше" "конца". "Первая треть" "раньше" "последней трети". "Первая треть" "раньше" "последней четверти". "Первая треть" "раньше" "второй половины".
"Первая четверть" "раньше" "середины". "Первая четверть" "раньше" "конца". "Первая четверть" "раньше" "последней трети". "Первая четверть" "раньше" "последней четверти". "Первая четверть" "раньше" "второй половины".
"Первая половина" "объединить" "вторая половина" равно "полный период"
2.1.2. Определение результатов операции СРАВНЕНИЕ
Определим сначала результаты операции СРАВНЕНИЕ для единичных исторических дат D1 и D2.
Если для двух точных единичных исторических дат D1 и D2 датообразующие атрибуты соответственно равны, то D1 "одновременно" D2.
Если для двух размытых единичных исторических дат с одинаковым уровнем размытости D1 и D2 датообразующие атрибуты соответственно равны, и, кроме того, равны или одновременно неопределены их атрибуты "уточнение размытости", то D1 "одновременно" D2.
Оба утверждения из двух предыдущих абзацев описываются следующим логическим выражением:
Для любого D1=(d11, d12, d13, d14, d15, d16, p1), D2=(d21, d22, d23, d24, d25, d26, p2) : ((d11=d21, d12=d22, d13=d23, d14=d24, d15=d25, d16=d26, p1=p2) следует, что (D1 "одновременно" D2))
Если для двух размытых единичных исторических дат с одинаковым уровнем размытости D1 и D2 датообразующие атрибуты соответственно равны, и при этом не равны их атрибуты "уточнение размытости", то результат операции СРАВНИТЬ для D1 и D2 зависит от значений этих атрибутов.
Если атрибут "уточнение размытости" исторической даты D1 неопределен, а для D2 он имеет любое определенное значение, то D1 "включает" D2.
Для любого D1=(d11, d12, d13, d14, d15, d16, p1), D2=(d21, d22, d23, d24, d25, d26, p2) : ((d11=d21, d12=d22, d13=d23, d14=d24, d15=d25, d16=d26, p1=null, p2≠null) следует, что (D1 "включает" D2))
Если атрибут "уточнение размытости" исторической даты D1 имеет любое определенное значение, а для D2 он неопределен, то D1 "включается в" D2.
Для любого D1=(d11, d12, d13, d14, d15, d16, p1), D2=(d21, d22, d23, d24, d25, d26, p2) : ((d11=d21, d12=d22, d13=d23, d14=d24, d15=d25, d16=d26, p1≠null, p2null) следует, что (D1 "включается в" D2))
Если же атрибут "уточнение размытости" для D1 и D2 имеют определенные значения, то результат операции СРАВНЕНИЕ для этих исторических дат определяется следующим образом. Определим, что для датообразующих атрибутов d3, d4, d5, d6 (лет, десятилетий, столетий, тысячелетий) "начало" представляет собой интервал (0-2), "первая четверть" – (0-2), "первая треть" – (0-3), "первая половина" (0-4), "середина" – (4-6), "вторая половина" – (5-9), "последняя треть" – (6-9), "последняя четверть" – (7-9), "конец" – (7-9). Для датообразующего атрибута d1 (дни) "начало" представляет собой интервал (1-6), "первая четверть" – (1-7), "первая треть" – (1-10), "первая половина" – (1-15), "середина" – (10-20), "вторая половина" – (16-31), "последняя треть" – (20-31), "последняя четверть" – (24-31), "конец" (25-31). Для датообразующего атрибута d2 (месяцы) "начало" представляет собой интервал (1-3), "первая четверть" – (1-3), "первая треть" – (1-4), "первая половина" – (1-6), "середина" – (5-8), "вторая половина" – (7-12), "последняя треть" – (9-12), "последняя четверть" (10-12), "конец" – (10-12).
Отметим, что значения границ этих интервалов условны и могут считаться параметрами системы. Конкретный исследователь может менять их значения по своему усмотрению и получать новые результаты операций над объектами типа историческая дата. При этом он должен понимать, что в процессе такой параметризации размытость превращается в интервал и далее работа с ней происходит как с интервалом, начало и конец которого представляют единичные точные даты.
Определим сначала результаты операции СРАВНЕНИЕ “раньше” и “позже” для подобных единичных точных дат D1 и D2 (результат “одновременно” для них был уже определен выше). Сравнение в этом случае производится следующим образом. Сначала сравниваются (как обычные целые числа) атрибуты d16 и d26 (соответствующие тысячелетия). Та единичная точная дата, для которой тысячелетие больше, будет “позже” (другая, соответственно, раньше). Если тысячелетия равны, сравниваем d15 и d25 (столетия). Та единичная точная дата, для которой столетие больше, будет “позже”. Если они равны, то сравниваем последовательно десятилетия, годы, месяцы, дни и поступаем далее подобным образом.
Для любого D1=(d11, d12, d13, d14, d15, d16, p1), D2=(d21, d22, d23, d24, d25, d26, p2) :
((d16 > d26) следует, что (D1 позже” D2)),
((d16 = d26 и d15 > d25) следует, что (D1 “позже” D2)),
((d16 = d26 и d15 = d25 и d14 > d24) следует, что (D1 “позже” 2)),
((d16 = d26 и d15 = d25 и d14 = d24 и d13 > d23) следует, что (D1 “позже” D2)),
((d16 = d26 и d15 = d25 и d14 = d24 и d13 = d23 и d12 > d22) следует, что (D1 “позже” D2)),
((d16 = d26 и d15 = d25 и d14 = d24 и d13 = d23 и d12 = d22 и d11 > d21) следует, что (D1 “позже” D2))
Вернемся к определению результатов операции СРАВНЕНИЕ для двух размытых исторических дат D1 и D2 с одинаковым уровнем размытости.
Исходя из шкалы для общего атрибута размытости D1 и D2, D1 "раньше" D2, если конец интервала D1 "раньше" начала интервала D2.
Для любого (D1=(Db1, De1), D2=(Db2, De2):
((De1 "раньше" Db2) следует, что (D1 "раньше" D2))
D1 "позже" D2, если начало интервала D1 “позже” конца интервала D2.
Для любого (D1=(Db1, De1), D2=(Db2, De2):
((Db1 "позже" De2) следует, что (D1 "позже" D2))
D1 "включает" D2, если (начало интервала D1 “раньше” или “одновременно” начала интервала D2) и (конец интервала D1 “позже” или “одновременно” конца интервала D2).
Для любого (D1=(Db1, De1), D2=(Db2, De2):
(((Db1 “раньше " Db2) или (Db1 “одновременно " Db2)) и((De1 "позже" De2) или (De1 “одновременно " De2)) следует, что (D1 "включает" D2))
D1 "включается в" D2, если (начало интервала D1 “позже” или “одновременно” начала интервала D2) и (конец интервала D1 “раньше" или “одновременно” конца интервала D2).
Для любого (D1=(Db1, De1), D2=(Db2, De2):
(((Db1 “позже" Db2) или (Db1 “одновременно " Db2)) и ((De1 “раньше" De2) или (De1 “одновременно " De2)) следует, что (D1 "включается в" D2))
D1 "строго пересекается" с D2, если ((начало интервала D1 “раньше” начала интервала D2) и (конец интервала D1 “раньше” конца интервала D2)) или ((начало интервала D1 “позже” начала интервала D2) и (конец интервала D1 “позже” конца интервала D2)).
Для любого (D1=(Db1, De1), D2=(Db2, De2):
(((Db1 “раньше" Db2) и (De1 “раньше " De2)) или ((Db1 “позже" Db2) и (De1 “позже" De2)) следует, что (D1 "строго пересекается " D2))
Теперь рассмотрим случай, когда для двух единичных исторических дат D1 и D2 не все датообразующие атрибуты соответственно равны. В этом случае, если у D1 больше старший из неравных датообразующих атрибутов, то D1 "раньше" D2. Если у D1 меньше старший из неравных датообразующих атрибутов, то D1 "позже" D2. Формула для этого случая аналогична уже приведенной выше формуле для определения результатов операции СРАВНЕНИЕ единичных точных дат D1 и D2.
Если D1 имеет больший уровень размытости, чем D2 и у них все определенные датообразующие атрибуты соответственно равны, то результат операции СРАВНЕНИЕ для D1 и D2 зависит от атрибута размытости D1 и датообразующего атрибута D2, соответствующего старшему неопределенному атрибуту D1 (обозначим его ds2). В этом случае будем использовать шкалу для атрибута размытости D1 и с ее помощью определим него интервал (dsb1, dse1).
D1 "раньше" D2, если dse1 меньше ds2. D1 "позже" D2, если dsb1 больше ds2. D1 "включает" D2, если (dsb1 меньше или равно ds2) и (dse1 больше или равно d2).
Для любого (D1=(d1,…, (dsb1, dse1),…, p1), D2=(d1,…, ds2,…)):
(dse1 < ds2) следует, что (D1 "раньше" D2),
(dsb1 > ds2) следует, что (D1 "позже" D2),
((dsb1 ds2) и (dse1 < ds2)) следует, что (D1 "включает" D2),
Если D1 имеет меньший уровень размытости, чем D2 и у них все определенные датообразующие атрибуты соответственно равны, то результат операции СРАВНЕНИЕ для D1 и D2 зависит от атрибута размытости D2 и датообразующего атрибута D1, соответствующего старшему неопределенному атрибуту D2 (обозначим его ds1). Как и в предыдущем случае будем использовать шкалу для атрибута размытости D2 и с ее помощью определим для него интервал (dsb2, dse2). D1 "раньше" интервала D2, если ds1 меньше dsb2. D1 "позже" D2, если ds1 больше dse2. D1 "включается в" D2, если (dsb2 меньше или равно ds1) и (dse2 больше или равно ds1).
Для любого (D1=(d1,…, ds1,…, p1), D2=(d1,…, (dsb2, dse2,…)):
(ds1 < dsb2) следует, что (D1 "раньше" D2),
(ds1 > dse2) следует, что (D1 "позже" D2),
((dsb2 ds1) и (dse2 < ds1)) следует, что (D1 "включается в" D2).
Напомним еще раз, что значения всех датообразующих атрибутов являются числами и сравнивать их следует как обычные числа.
Теперь определим результаты операции СРАВНЕНИЕ для произвольных исторических дат D1 и D2.
Пусть D1 – интервал (Db1, De1), а D2 – единичная дата. Тогда D1 "раньше" D2, если De1 "раньше" D2. D1 "позже" D2, если Db1 "позже" D2. D1 "включает" D2, если (Db1 "раньше", "одновременно" или "включает" D2) и (De1 "позже", "одновременно" или "включает" D2). D1 "включается в" D2, если (Db1 "одновременно" или "включается в" D2) и (De1 "одновременно" или "включается в" D2). D1 "пересекается" с D2, если D1 не "раньше", не "позже", не "включает" и не "включается в" D2.
Для любого (D1=(Db1, De1), D2):
(De1 "раньше" D2) следует, что (D1 "раньше" D2),
(Db1 "позже" D2) следует, что (D1 "позже" D2),
(((Db1 "раньше" D2) или (Db1 "одновременно" D2) или (Db1 "включает" D2)) и ((De1 "позже" D2) или (De1 "одновременно" D2) или (De1 "включает" D2))) следует, что (D1 "включает" D2),
(((Db1 "одновременно" D2) или (Db1 "включается в" D2)) и ((De1 "одновременно" D2) или (De1 "включается в” D2))) следует, что (D1 "включается в" D2),
(¬ (D1 "раньше" D2) и ¬ (D1 "позже" D2) и ¬ (D1 "включает" D2) и ¬ (D1 "включается в" D2)) следует, что (D1 "пересекается" D2).
Пусть D1 – единичная дата, а D2 – интервал (Db2, De2). Тогда D1 "раньше" D2, если D1 "раньше" Db2. D1 "позже" D2, если D1 "позже" De2. D1 "включает" D2, если (Db2 "одновременно" или "включается в" D1) и (De2 "одновременно" или "включается в" D1). D1 "включается в" D2, если (Db2 "раньше", "одновременно" или "включает" D1) и (De2 "позже", "одновременно" или "включает" D2). D1 "пересекается" с D2, если D1 не "раньше", не "позже", не "включает" и не "включается в" D2.
Для любого (D1, D2=(Db2, De2)):
(D1 "раньше" Db2) следует, что (D1 "раньше" D2),
(D1 "позже" De2) следует, что (D1 "позже" D2),
(((Db2 "одновременно" D1) или (Db2 "включается в" D1)) и ((De2 "одновременно" D1) или (De2 "включается в” D1))) следует, что (D1 "включает" D2),
(((Db2 "раньше" D1) или (Db2 "одновременно" D1) или (Db2 "включает" D1)) и ((De2 "позже" D1) или (De2 "одновременно" D1) или (De2 "включает" D1))) следует, что (D1 "включается в" D2),
(¬ (D1 "раньше" D2) и ¬ (D1 "позже" D2) и ¬ (D1 "включает" D2) и ¬ (D1 "включается в" D2)) следует, что (D1 "пересекается" D2).
Пусть D1 – интервал (Db1, De1), а D2 – интервал (Db2, De2). Тогда D1 "раньше" D2, если De1 "раньше" Db2. D1 "позже" D2, если Db1 "позже" De2. D1 "включает" D2, если (Db1 "раньше", "одновременно" или "включает" Db2) и (De1 "позже", "одновременно" или "включает" De2). D1 "включается в" D2, если (Db1 "позже", "одновременно" или "включается в" Db2) и (De1 "раньше", "одновременно" или "включается в" De2). D1 "одновременно" D2, если Db1 "одновременно" Db2 и De1 "одновременно" De2. D1 "пересекается" с D2, если D1 не "раньше", не "позже", не "включает", не одновременно"и не "включается в" D2.
Для любого (D1=(Db1, De1), D2=(Db2, De2)):
(De1 "раньше" Db2) следует, что (D1 "раньше" D2),
(Db1 "позже" De2) следует, что (D1 "позже" D2),
(((Db1 "раньше" Db2) или (Db1 "одновременно" Db2) или (Db1 "включает" Db2)) и ((De1 "позже" De2) или (De1 "одновременно" De2) или (De1 "включает" De2))) следует, что (D1 "включает" D2),
(((Db1 "позже" Db2) или (Db1 "одновременно" Db2) или (Db1 "включается в" Db2)) и ((De1 "раньше" De2) или (De1 "одновременно" De2) или (De1 "включается в" De2))) следует, что (D1 "включается в" D2),
((Db1 "одновременно" Db2) и (De1 "одновременно" De2) следует, что (D1 "одновременно" D2),
(¬ (D1 "раньше" D2) и ¬ (D1 "позже" D2) и ¬ (D1 "включает" D2) и ¬ (D1 "включается в" D2) и ¬ (D1 "одновременно" D2)) следует, что (D1 "пересекается" D2).
Пусть, наконец, D1 и D2 представляют собой произвольные совокупности единичных дат и интервалов. Обозначим {Db1} множество единичнных дат и начал интервалов исторической даты D1, {Db2} множество единичнных дат и начал интервалов исторической даты D2, {De1} множество единичнных дат и концов интервалов исторической даты D1, {De2} множество единичнных дат и концов интервалов исторической даты D2.
Тогда D1 "раньше" D2, если все даты из {De1} "раньше" всех дат из {Db2}.
D1 "позже" D2, если все даты из {De1} "позже" всех дат из {De2}.
Для любого (D1={(Db1i, De1i), i=1,n1}, D2={(Db2i, De2i), i=1,n2}):
(Для любого Df принадлежащего {Db1i}, Для любого Dp принадлежащего {Db2i} : Df “раньше” Dp) следует, что (D1 "раньше" D2),
(Для любого Df принадлежащего {De1i}, Для любого Dp принадлежащего {De2i} : Df “позже” Dp) следует, что (D1 "позже" D2).
D1 "включает" D2, если все интервалы и единичные даты из D2 "включаются в" некоторые ин-тервалы и единичные даты из D1. D1 "включается в" D2, если все интервалы и единичные даты из D1 "включаются в" некоторые интервалы и единичные даты из D2. D1 "одновременно" D2, если все интервалы и единичные даты из D1 "одновременно" с некоторыми интервалами и единичными датами из D2 и все интервалы и единичные даты из D2 "одновременно" с некоторыми интервалами и единичными датами из D1. D1 "пересекается" с D2, если существуют интервалы и единичные даты из D1, которые "пересекаются" с некоторыми интервалами и единичными датами из D2. D1 "чередуется" с D2, если D1 не "раньше", не "позже", не "включает" не "включается в", "не одновременно" не "пересекается" с D2.
Для любого (D1={D1i, i=1,n1}, D2={D2i}, i=1,n2}):
(Для любого D2k принадлежащего {D2i} следует, что D1m принадлежащего {D1i} : D1m “включает” D2k) следует, что (D1 "включает" D2),
(Для любого D1m принадлежащего {D1i} следует, что D2k принадлежащего {D2i} : D1m “включается в” D2k) следует, что (D1 "включается в" D2),
((Для любого D1m принадлежащего {D1i} следует, что D2k принадлежащего {D2i} : D1m “одновременно” D2k) и (Для любого D2k принадлежащего {D2i} следует, что D1m принадлежащего {D1i} : D1m “одновременно” D2k)) следует, что (D1 "одновременно" D2),
(следует, что D1m принадлежащего {D1i}, следует, что D2k принадлежащего {D2i} : Dlm “пересекается” D2k) следует, что D1 "пересекается" D2,
(¬ (D1 "раньше" D2) и ¬ (D1 "позже" D2) и ¬ (D1 "включает" D2) и ¬ (D1 "включается в" D2) и ¬ (D1 "одновременно" D2) и ¬ (D1 "пересекается" D2)) следует, что (D1 "чередуются" D2).
2.2. Двухместные операции над множеством объектов типа историческая дата
Последующие шесть операций образуют алгебру над множеством исторических дат.
Описание будем проводить для наиболее общего случая, когда оба аргумента представляют собой сложные исторические даты, т.е. совокупность (интервалов и единичных исторических дат). Будем обозначать эти компоненты для D1 – {d1}, для D2 – {d2}.
Отметим, что в при описании этих операций для размытых единичных дат началом будем считать точную единичную дату, соответствующую началу интервала размытости, а концом – точную единичную дату, соответствующую концу интервала размытости.
В дальнейшем описании результатов операций на объектами типа “историческая дата” будем использовать только словесное описание, что, по нашему мнению, не уменьшит строгости изложения.
Операции ЧИСТОЕ ОБЪЕДИНЕНИЕ, ПОГЛОЩАЮЩЕЕ ОБЪЕДИНЕНИЕ, ПЕРЕСЕЧЕНИЕ, РАЗНОСТЬ являются всюду определенными двухместными операциями над множеством исторических дат, их результатом является тоже историческая дата. Будем обозначать их аргументы D1 и D2, а результат – D3.
2.2.1. Операция ЧИСТОЕ ОБЪЕДИНЕНИЕ
Если некоторая компонента из {d1} не "включает", не "включается в", не "одновременно", не "строго пересекается" ни с одним компонентом из {d2}, то эта совокупность без изменений переносится в D3.
Если некоторая компонента из {d2} не "включает", не "включается в", не "одновременно", не "строго пересекается" ни с одним компонентом из {d1}, то эта компонента без изменений переносится в D3.
Если некоторая компонента из {d1} "включает" или "одновременна" некоторым компонентам из {d2}, то эта компонента без изменений переносится в D3, а все включающиеся и одновременные ей компоненты из {d2} не включаются в D3 и из дальнейшего рассмотрения исключаются.
Если некоторая компонента из {d2} "включает" или "одновременна" некоторым компонентам из {d1}, то эта компонента без изменений переносится в D3, а все включающиеся и одновременные ей компоненты из {d2} не включаются в D3 и из дальнейшего рассмотрения исключаются.
Рассмотрим случай, когда некоторая компонента из {d1} "строго пересекается" с некоторой компонентой из {d2}. В этом случае в D3 помещается интервал (db, de), где db – наиболее ранняя дата из начал этих компонент (если они интервалы) или самих этих компонент (если они – единичные даты); de – наиболее поздняя дата из концов этих компонент (если они интервалы) или самих этих компонент (если они – единичные даты).
2.2.2. Операция ПОГЛОЩАЮЩЕЕ ОБЪЕДИНЕНИЕ
D3 будет представлять собой интервал (db, de), где db – наиболее ранняя дата из начал компонент {d1} и {d2} (если они интервалы) или самих этих компонент (если они – единичные даты); de – наиболее поздняя дата из концов этих компонент (если они интервалы) или самих этих компонент (если они – единичные даты).
2.2.3. Операция ПЕРЕСЕЧЕНИЕ
Если для некоторой компоненты из {d1} существует компонента из {d2}, которая "одновременна" ей, то эта компонента переносится в D3.
Если для некоторой компоненты из {d1} существует компонента из {d2}, которая "включает" ее, то эта компонента переносится в D3.
Если для некоторой компоненты из {d1} существует компонента из {d2}, которая "включается в" нее, то в D3 переносится соответствующая компонента из {d2}.
Если для некоторой компоненты из {d1} существует компонента из {d2}, которая "строго пересекается" с ней, то в D3 заносится интервал, начало которого представляет более позднюю дату из начал соответствующих компонент, а конец – более раннюю дату из концов соответствующих компонент.
2.2.4. Операция РАЗНОСТЬ
Если компонента из {d1} не "одновременно", не "включает", не "включается в", не "строго пересекается" ни с одной компонентой из {d2}, то эта компонента включается в D3.
Если компонента из {d1} "включается в" или "одновременно" с некоторой компонентой из {d2}, то она не попадает в D3 и из дальнейшего рассмотрения исключается.
Если компонента из {d1} "включает" некоторую компоненту из {d2}, то :
если у этих компонент не "одновременно" соответственно начала и концы, то в D3 включаются два интервала, у первого из них начало совпадает с началом компоненты из {d1}, а конец – с началом из {d2}, у второго – начало совпадает с концом компоненты из {d2}, а конец – с концом компоненты из {d1};
если у этих компонент "одновременно" начала, то в D3 включается интервал, у которого начало совпадает с концом компоненты из {d2}, а конец – с концом компоненты из {d1};
если у этих компонент "одновременно" концы, то в D3 включается интервал, у которого начало совпадает с началом компоненты из {d1}, а конец – с началом из {d2}.
Если компонента из {d1} "строго пересекает" некоторую компоненту из {d2}, то в D3 включаются два интервала, у первого из них начало совпадает с более ранним началом среди этих компонентов, а конец – с более поздним началом, у второго – начало совпадает с более ранним концом среди этих компонентов, а конец – с более поздним концом.
2.3. Одноместные операции над множеством объектов типа историческая дата
Операции ДОПОЛНЕНИЕ, МИНИМАКС и МАКСИМИН являются всюду определенными одноместными операциями над множеством исторических дат, их результатом является тоже историческая дата. Будем обозначать их аргументы D1, а результат – D2.
2.3.1. Операция ДОПОЛНЕНИЕ
Результатом операции ДОПОЛНЕНИЕ будет совокупность интервалов, началом первого из которых будет "самая ранняя дата", концом первого начало первой компоненты из {d1} (сама компонента, если она единичная дата), началом последнего – конец последней компоненты из {d1} (сама компонента, если она – единичная дата). У каждого из остальных интервалов {d2} началом будет конец предыдущей компоненты из {d1} (сама компонента, если она – единичная дата), концом – начало последующей компоненты из {d1}, причем такие интервалы добавляются для каждой пары "предыдущая – последующая" компонента из {d1}.
2.3.2. Операция МИНИМАКС
Результатом операции МИНИМАКС является историческая дата, являющаяся наиболее поздней из множества начал компонент из {d1} (если компонента является единичной датой, то учитывается сама эта дата). Такая операция может быть выполнена для определения наиболее ранней даты зарытия клада, в этом случае компоненты {d1} – интервалы чеканки различных монет из клада.
2.3.2. Операция МАКСИМИН
Результатом операции МАКСИМИН является историческая дата, являющаяся наиболее ранней из множества концов компонент из {d1} (если компонента является единичной датой, то учитывается сама эта дата). Такая операция может быть выполнена для определения наиболее ранней даты основания склепа, в этом случае компоненты {d1} – интервалы жизни похороненных в склепе лиц.
Заключение
Дойдя до этого места читатель может задать себе и автору вопрос :
“- Возможно, все это любопытно и не лишено некоторой элегантности, но какую практическую пользу можно из всего этого извлечь?”.
Дело в том, что строго описав, а затем реализовав эти операции над объектом “историческая дата” в информационно-поисковой системе или базе данных, мы получаем как минимум три новых инструмента.
Во-первых, мы можем задавать сложные условия поиска информации в базе с использованием дат событий. Например “Найти все события из некоторого множества, который произошли до события А, после события Б, но не в период времени В”. При этом “временные” условия при поиске можно комбинировать с любыми другими условиями, которые можно задавать в базе (например, “географическими” условиями, чисто “текстовыми” условиями и т.п.).
Во-вторых, в базе данных можно задавать так называемые “ограничения целостности” с использованием дат. Например, можно было бы задать, что событие типа А всегда происходит позже соответствующего события типа В, или что объединение соответствующих событий типа А и типа Б всегда дает соответствующее событие типа В. После того, как такие ограничения заданы, система не будет давать возможность вводить в базу данные, не удовлетворяющие этим ограничениям. Тем самым база будет защищена от заведомо неправильной информации.
В-третьих, появляется возможность задавать в базе так называемую “выводимую информацию” с использованием дат. Например, можно задать, что некоторая дата А всегда является пресечением дат Б и В. В этом случае нет необходимости вводить значение даты А, оно может “вычисляться” автоматически при каждом изменении дат Б и В. Эта возможность способствует уменьшению объема работы по вводу и модификации информации в базе и повышает ее достоверность, уменьшая возможность ввода ошибочной информации.
Может быть, не все эти возможности будут реализованы в первой очереди базы данных “Памятники Украины”, но результаты данной работы дают теоретическую почву для такой реализации.
Джерело : Археометрія та охорона історико-культурної спадщини, 1997 р., вип. 1, с. 50 – 58.