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

неравенства (8.6), и

свойства фундированности множества натуральных чисел (т.е. из того, что в данном множестве нет бесконечных убывающих цепей).

Читателю предлагается самостоятельно

найти необходимые и достаточные условия, которым должны удовлетворять разделяемые множества U и V , чтобы приведённый выше алгоритм завершал свою работу с этими U и V нормально, и

разработать такой алгоритм разделения множеств, который бы работал корректно на любых разделяемых множествах U и V .

8.2Вычисление квадрата

Предположим, что мы имеем систему “умножитель”, у которой есть

два входных порта с именами In1 и In2, и

один выходной порт с именем Out.

Работа умножителя заключается в том, что он периодически

получает на свои входные порты два значения, и

выдаёт на выходном порте их произведение.

Поведение умножителя описывается процессом Mul:

?

 

Out ! (x · y)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-

 

 

A

- B

 

 

C

In1 ? x In2 ? y

 

243

Используя этот умножитель, мы хотим построить систему “вычислитель квадрата”, поведение которой описывается процес-

сом Square_Spec: In ? zOut ! (z2) -

Искомую систему мы построим как композицию

вспомогательной системы “дубликатор”, имеющей

входной порт In, и

выходные порты Out1 и Out2

поведение которой описывается процессом Dup:

?

Out2 ! z

 

 

 

 

 

 

 

 

 

-

 

 

a

- b

 

 

 

c

In ? z

Out1 ! z

 

т.е. дубликатор копирует свой вход на два выхода, и

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

Процесс Square, соответствующий такой композиции, определяется следующим образом:

 

 

def

 

 

 

 

 

 

 

 

 

 

Square =

, pass2

/In2]

| ! \ {pass1, pass2}

=

 

Mul[pass1/In1

def

Dup[pass1/Out1

, pass2

/Out2]

 

 

 

 

|

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Потоковый граф процесса Square имеет вид

 

 

'

$1

'

$

 

 

 

 

 

 

u

pass

- e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

In

e Dup

u

pass2

-

 

e

Mul

uOut

 

 

 

 

 

 

 

 

 

 

 

 

&

%

 

&

 

%

244

Однако процесс Square не соответствует своей спецификации Square_Spec. Данный факт нетрудно установить при помощи построения графового представления процесса Square, который, согласно определению операций параллельной композиции, ограничения и переименования, имеет следующий вид:

?

 

 

Out ! (x · y)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

aA

 

 

 

aB

 

 

 

 

 

 

aC

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

In ? z

 

 

 

 

In ? z

 

 

 

In ? z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

?

 

 

 

 

 

?

 

 

 

 

?

 

 

 

 

 

 

 

 

 

bA

 

 

 

bB

 

 

 

 

 

 

bC

 

 

 

 

 

 

 

 

 

6@@

 

 

 

 

 

 

 

 

 

@

Out ! (x

y)

 

 

 

 

 

 

 

 

@

@

 

·

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

@

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y := z

 

 

 

 

 

 

 

 

 

x := z @

 

 

 

 

 

 

 

 

 

 

 

 

@

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

cA

 

 

@R

 

 

 

 

 

 

cC

 

 

 

cB

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

 

Out ! (x · y)

 

 

 

 

 

 

 

После редукции данного процесса мы получим диаграмму

 

 

In ? z

 

 

 

 

 

 

 

x := z

 

 

(8.8)

 

A1

y := z

-

A2

In ? z

-

A3

 

Out ! (x · y)

Out ! (x · y)

 

 

 

 

 

x := z

 

 

 

y := z

245

из которой видно, что

процесс Square может последовательно совершить два действия ввода, не выполняя между ними действия вывода,

а процесс Square_Spec этого сделать не может.

Процесс Square соответствует другой спецификации:

Square_Spec0

def

Buf [pass/Out]

] ! \ {pass}

=

|

Square_Spec[pass/In|

 

 

 

 

где Buf – буфер длины 1, поведение которого изображается диа-

граммой

In ? xOut ! x -

Потоковый граф процесса Square_Spec0 имеет вид

' $' $

 

pass

In e Buf

u -

eSquare_Spec uOut

&

%&

 

%

Графовое представление процесса Square_Spec0 получается путём

применения операций параллельной композиции, ограничения и переименования к процессам Buf и Square_Spec,

и

выполнения редукции получившегося процесса. Редуцированный процесс Square_Spec0 имеет вид

 

 

z := x

 

 

In ? x

 

a1

In ? x

-

a2

 

-

a3

(8.9)

 

 

z := x 2

 

 

Out ! (z2)

 

 

 

Out ! (z

)

 

 

 

 

 

 

246

Соответствие процесса Square спецификации Square_Spec0 можно понимать как истинность соотношения

(8.8) ≈ (8.9)

Доказать наблюдаемую эквивалентность процессов (8.8) и (8.9) можно, например, при помощи теоремы 34. Для того, чтобы её можно было применить, переименуем переменные в процессе (8.9) (чтобы множества переменных анализируемых процессов не пересекались). Мы получим процесс, эквивалентный процессу (8.9):

 

 

v := u

 

(8.10)

a1

In ? u

-

a2

 

In ? u

-

a3

 

 

 

 

v := u 2

 

 

Out ! (v2)

 

 

 

Out ! (v

)

 

 

 

 

 

 

Для доказательства соотношения (8.8) ≈ (8.10) при помощи теоремы 34 мы определим функцию

µ : {A1, A2, A3} × {a1, a2, a3} → F m

следующим образом:

def

• µ(Ai, aj) = , если i =6 j

def

• µ(A1, a1) = >

def

• µ(A2, a2) = (x = y = z = u)

()

def

x = y = v

• µ(A3, a3) =

z = u

Детальная проверка истинности соответствующих диаграмм остаётся читателю в качестве несложного упражнения.

247