Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
23.05.2015
Размер:
1.7 Mб
Скачать

Глава 6

Примеры доказательства свойств процессов

6.1Потоковые графы

Если процесс P можно представить в виде алгебраического выражения

P (P1, . . . , Pn)

(6.1)

в которое входят процессы P1, . . . , Pn, соединённые символами операций

параллельной композиции,

ограничения, и

переименования

то P называется структурной композицией процессов P1, . . .,

Pn.

Если процесс P является структурной композицией, то ему можно сопоставить некоторый графический объект

G(P )

называемый потоковым графом (ПГ) процесса P . Представление структурной композиции в виде ПГ повышает

наглядность и облегчает понимание взаимосвязи между её компонентами.

141

Для построения ПГ G(P ) для процесса P вида (6.1) строятся ПГ, соответствующие всем подвыражениям выражения (6.1).

Элементарные ПГ:

Для каждого i = 1, . . . , n, и каждого вхождения Pi в выражение (6.1), ПГ G(Pi), соответствующий этому вхождению, имеет вид овала, внутри которого написано знакосочетание

Pi.

На периметре овала рисуется несколько кружочков, называемых портами.

Каждый порт соответствует некоторому действию из множества Act(Pi), причём

если это действие имеет вид α!, то соответствующий этому действию порт рисуется чёрным цветом, и

если это действие имеет вид α?, то соответствующий этому действию порт рисуется белым цветом.

Около каждого порта написана его метка, равная тому действию из Act(Pi), которому соответствует этот порт.

Отметим, что если Pi имеет несколько вхождений в выражение (6.1), то для каждого такого вхождения рисуется отдельный элементарный ПГ G(Pi).

Параллельная композиция:

Если выражение (6.1) содержит подвыражение вида P 0 | P 00, то G(P 0 | P 00) получается

дизъюнктным объединением G(P 0) и G(P 00), и

соединением стрелочками в этом дизъюнктном объединении портов ПГ G(P 0) и G(P 00) с комплементар-

ными метками: если

один из этих ПГ содержит порт с меткой α!, и

другой из этих ПГ содержит порт с меткой α?,

то рисуется стрелочка с меткой α от первого порта к второму.

142

Ограничение:

G(P 0\L) получается из G(P 0) удалением меток портов, имена которых принадлежат L.

Переименование:

G(P 0[f]) получается из G(P 0) соответствующим переименованием меток портов.

В излагаемых ниже примерах процессов приводятся ПГ, соответствующие этим процессам.

6.2Мастерская

Рассмотрим модель мастерской, в которой работают двое рабочих, пользующиеся для работы одним молотком.

Поведение каждого рабочего в мастерской описывается процессом Jobber

Jobber

6

out!

F inish

in? - Start

get_and_work!

put! ?Using

Действия in? и out! используются для взаимодействия рабочего с заказчиком, и обозначают соответственно

прием материала, и

выдачу готового изделия.

Действия get_and_work! и put! используются для взаимодействия рабочего с молотком, и обозначают соответственно

143

взятие молотка и выполнение с его помощью некоторых действий, и

возвращение молотка на место.

Обратим внимание, что действие get_and_work! состоит из нескольких действий, которые мы не детализируем и агрегируем все их в одно действие.

Согласно графовому представлению процесса Jobber, рабочий

сначала принимает материал,

затем берет молоток и работает,

после чего кладет молоток,

выдает готовое изделие,

и все повторяется сначала.

Поведение молотка мы представляем при помощи следующего процесса Mallet:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

get_and_work?

 

 

 

 

 

-

 

 

Mallet

 

 

Busy

 

 

 

put?

 

 

 

Отметим, что объект “молоток” и процесс “молоток” - это разные понятия.

Функционирование мастерской определяется при помощи следующего процесса Job_Shop:

Job_Shop = (Jobber | Jobber | Mallet) \ L

где L = {get_and_work, put}.

144

Потоковый граф процесса Job_Shop имеет следующий вид.

get_and_work get_and_work

'e u

 

 

 

'@u e $

$ 'e

$

in

@

 

@ in

 

 

 

 

R@

 

 

 

 

 

Jobber

 

 

 

Mallet

 

 

 

Jobber

 

 

 

&

 

%

 

&e

 

 

%

 

&

 

%

 

 

 

 

 

 

@

 

 

 

 

I@

 

 

 

 

 

outu u@

 

 

 

@

 

 

 

u outu

 

 

 

put

 

 

 

 

 

put

Введем теперь понятие “абстрактного рабочего”, про которого известно, что он циклически

принимает материал, и

выдает готовые изделия

но ничего неизвестно о подробностях процесса его работы. Поведение “абстрактного рабочего” мы зададим при помощи

следующего процесса Abs_Jobber:

 

 

 

 

 

 

in?

-

 

 

 

 

 

 

 

Abs

Jobber

 

 

 

 

_

 

 

 

Doing

 

 

 

out!

 

 

Поведение “абстрактной мастерской” мы зададим при помощи следующего процесса Abs_Job_Shop:

Abs_Job_Shop = Abs_Jobber | Abs_Jobber

“Абстрактную мастерскую” мы будем использовать как спецификацию мастерской. Процесс “абстрактная мастерская” представляет поведение мастерской без учета деталей ее реализации.

145

Докажем соответствие мастерской ее спецификации, то есть наличие наблюдаемой конгруэнции

+

(6.2)

Job_Shop ≈ Abs_Job_Shop

Процесс Abs_Job_Shop является параллельной композицией двух процессов Abs_Jobber. В целях предотвращения коллизии в обозначениях, мы выберем различные идентификаторы для обозначения состояний этих процессов. Пусть, например, эти процессы имеют вид in?

Ai out! - Di

где i = 1, 2.

Параллельная композиция этих процессов имеет вид

in? -A1, A2 out! A1, D2

66

in? out!

in? out!

? in? ?D1, A2 out! - D1, D2

Применяя к данному процессу процедуру минимизации относительно наблюдаемой эквивалентности, мы получим процесс

 

 

 

 

 

 

 

in?

-

 

 

in?

-

 

 

 

 

 

 

out!

(6.3)

out!

Процесс Job_Shop имеет 4 · 4 · 2 = 32 состояния, и мы не приводим его здесь ввиду его большой громоздкости. Если минимизировать этот процесс относительно наблюдаемой эквивалентности, то получится процесс, изоморфный процессу (6.3).

146