- •Вопрос №9(Система аксиом ив, Полнота и независимость системы аксиом)
- •Аксиомы ив
- •1.6. Операции над протоколами
- •1.6.1. Конкатенация
- •1.6.2. Сужение
- •1.6.3. Голова и хвост
- •1.6.4. Звездочка
- •1.6.5. Порядок
- •1.6.6. Длина
- •1.7. Реализация протоколов
- •1.8. Протоколы процесса
- •1.8.1. Законы
- •1.8.2. Реализация
- •1.8.3. После
- •1.9. Дальнейшие операции над протоколами
- •1.9.1. Замена символа
- •1.9.2. Конкатенация
- •1.9.3. Чередование
- •1.9.4. Индекс
- •1.9.5. Обратный порядок
- •1.9.6. Выборка
- •1.9.7. Композиция
- •2.2. Взаимодействие
- •2.2.1. Законы
- •2.2.2. Реализация
- •2.2.3. Протоколы
- •2.3. Параллелизм
- •2.3.1. Законы
- •2.3.2. Реализация
- •2.3.3. Протоколы
- •1.10.1. Соответствие спецификации
- •1.10.2. Доказательства
1.6. Операции над протоколами
Протоколам принадлежит основная роль в фиксировании, описании и понимании поведения процессов. В этом разделе мы исследуем некоторые общие свойства протоколов и операций над ними. Введем следующие соглашения:
s, t, u обозначают протоколы,
S, T, U обозначают множества протоколов,
f, g, h обозначают функции.
1.6.1. Конкатенация
Наиболее важной операцией над протоколами является конкатенация, которая строит новый протокол из пары операндов s и t, просто соединяя их в указанном порядке; результат будем обозначать s^t. Например,
(<мон, шок>^<мон, ирис> = <мон, шок, мон, ирис>
<n1>^<n1> = <n1, n1>
<n1, n1>^<> = <n1, n1>
Самые важные свойства конкатенации – это ее ассоциативность и то, что пустой протокол <> служит для нее единицей:
L1. s^ <> = <>^s
L2. s^(t ^ u> = (s^t)^u
Следующие законы и очевидны, и полезны:
L3. s^t = t^u ≡ t = u
L4. s^t = u^t ≡ s = u
L5. s^t = <> ≡ s = <> & t = <>
Пусть f – функция, отображающая протоколы в протоколы. Мы говорим, что функция строгая, если она отображает пустой протокол в пустой протокол:
f(<>) = <>
Будем говорить, что функция дистрибутивна, если
f(s^t) = f(s)^f(t)
Все дистрибутивные функции являются строгими.
Если n – натуральное число, то tn будет обозначать конкатенацию n копий протокола t. Ее легко определить индукцией по n:
L6. t0 = <>
L7. tn+1 = t^tn
Это определение дает нам два полезных закона; и еще два можно доказать как их следствия:
L8. tn+1 = tn^t
L9. (s^t)n+1 = s^(t^s)n^t
1.6.2. Сужение
Выражение (t ↾ A) обозначает протокол t, суженный на множество символов A; он строится из t отбрасыванием всех символов, не принадлежащих A. Например,
<вокруг, вверх, вниз, вокруг > ↾ {вверх, вниз} = <вверх, вниз>
Сужение дистрибутивно и поэтому строго.
L1. <> ↾ A = <>
L2. (s^t) ↾ A = (s A)^(t A)
Эффект сужения на одноэлементных последовательностях очевиден:
L3. <x> ↾ A = <x> если х ∈ А
L4. <y> ↾ A = <> если у ∉ A.
Дистрибутивная функция однозначно определяется своими результатами на одноэлементных последовательностях, поскольку ее значения на последовательностях большей длины могут быть вычислены конкатенацией ее результатов на отдельных элементах последовательности. Например, если x ≠ у, то
<x, y, x> = (<x>^<y>^<x>) ↾ {x} = (<x> ↾ {x})^(<y> ↾ {x})^(<x> ↾ {x}) по L2
= <x>^<>^<x> по L3, L4
= <x, x>
Приведенные ниже законы раскрывают взаимосвязь сужения и операций над множествами. От протокола, суженного на пустое множество, не остается ничего, а последовательное сужение на два множества равнозначно одному сужению на пересечение этих множеств. Эти законы можно доказать индукцией по длине s.
L5. s ↾{} = <>
L6. (s ↾A) ↾ B = s (A ∪ B) ;
1.6.3. Голова и хвост
Если s – непустая последовательность, обозначим ее первый элемент s0, а результат, полученный после его удаления,– s’. Например:
<x, y, x>0 = x
<x, y, x>’ = <y, x>
Обе эти операции не определены для пустой последовательности.
L1. (<x>^s>0 = x
L2. (<x>^s)' = s
L3. s = (<s0>^s’) если s ≠ <>.
Следующий закон предоставляет удобный метод доказательства равенства или неравенства двух протоколов:
L4. s = t ≡ (s = t = <> ∨ (s0 = t0 & s’ = t’))