Интервалы
Время — это важный фактор для любого агента, выполняющего действия, и поэтому в области представления временнь/х интервалов был проведен большой объем исследовательских работ. В данном разделе рассматриваются интервалы двух типов: моменты времени и продолжительные интервалы. Различие между ними состоит в том, что только моменты времени имеют нулевую продолжительность:
Parti tion ({Moments, Extendedlntervals] , Intervals)
i e Moments <=> Duration (i) = Seconds (0)
Затем необходимо ввести временную шкалу и связать точки на этой шкале с моментами времени, что позволяет сформулировать понятие абсолютных значений времени. Временная шкала выбирается произвольно; в данной книге время измеряется в секундах и используется соглашение, что момент времени в полночь (среднее время по Гринвичу) 1 января 1900 года имел значение времени 0. Функции Start и End позволяют определить самый первый и самый последний моменты времени в интервале, а функция Time сообщает момент времени на временной шкале, соответствующий текущему моменту. Функция Duration измеряет разность между временем окончания и временем начала. Примеры применения этих функций приведены ниже.
Interval(i) => Duration(i) = {Time{End(i))-Time{Start(i)))
Time(Start(AD1900)) = Seconds{0)
Time{Start(AD2001)) = Seconds(3187324800)
Time(End(AD2001)) = Seconds(3218860800)
Duration(AD2001) = Seconds(31536000)
Для того чтобы было проще читать эти числа, обозначающие количество секунд от начала отсчета, введем также функцию Date, которая принимает шесть параметров (часы, минуты, секунды, день, месяц и год) и возвращает точку во времени:
Time(Start{AD2001)) = Date(0, 0, 0,1,Jan, 2001) Date(0,20,21,24,1,1995) = Seconds(3000000000)
Предикат Meet позволяет определить, равно ли время окончания первого интервала времени начала второго интервала; эти значения времени задаются в секундах. Существует возможность определить такие предикаты, как Before, After, During и Overlap, исключительно в терминах предиката Meet, но более интуитивно понятными являются их определения в терминах точек на временной шкале (графическое представление этих предикатов приведено на рис. 10.5):
Meet{i,j) <=> Time{End{i)) = Time (Start {j) ) Before{i,j) <=> Time {End (i)) < Time (Start (j) ) After(j,i) <=> Before (i, j)
During(i,j) <=> Time (Start (j) ) < Time (Start (i) )
A Time(End(i)) < Time(End(j)) Overlapd , j) <=> 3k During(k, i) A During(k, j)
Например, чтобы сформулировать утверждение, что царствование Елизаветы II следовало за царствованием Георга VI, а царствование Элвиса Пресли совпадало с периодом 1950-х годов, можно записать следующее:
After(ReignOf(Elizabethll),ReignOf(GeorgeVI)) Overlap{Fifties, ReignOf(Elvis))