Ввод и вывод
Пусть v – элемент aс(Р). Процесс, который сначала выводит v по каналу с, а затем ведет себя как Р, обозначим
(с ! v → P) = (c.v → P).
Единственное событие, к которому этот процесс готов в начальном состоянии. – это взаимодействие c.v.
Процесс, который сначала готов ввести любое значение х, предаваемоепо каналу с, а затем ведет себя как Р(х), обозначим
(с ? v → P(х)) = (у: {y | канал(у) = c} → P(сообщ(у))).
Пусть P, Q – процессы, с – выходной канал P и входной канал Q. Если P, Q объединены в параллельную систему (P || Q), то взаимодействие по каналу с будет происходить всякий раз, когда P выводит сообщение, а Q в тот же самый момент вводит его. Выводящий процесс однозначно определяет значение передаваемого сообщения, тогда как вводящий процесс готов принять любое поступающее значение. Поэтому в действительности происходящим событием будет взаимодействие c.v, где v – значение. Определяемое выводящим процессом. Отсюда вытекает очевидное ограничение, что алфавиты на обоих концах канала должны совпадать, т.е. aс(Р) = aс(Q).
В общем случае значение, вводимое процессом, определяется выражением, содержащим переменные, которым было присвоено значение некоторым предыдущим вводом, что иллюстрируется следующими примерами.
Пример 3.20. Процесс, копирующий каждое сообщение, поступающее слева, выводя его направо:
aлев(КОПИР) = aправ(КОПИР)
КОПИР = µХ.(лев ? х → прав ! х → Х).
Если aлев = {0, 1}, то КОПИР почти полностью совпадает с КОПИБИТ.
Пример 3.21. Процесс, похожий на КОПИР, с той разницей, что каждое вводимое число перед выводом удваивается:
aлев = aправ = Nat
УДВ = µХ.(лев ? х → прав ! (х + х) →Х).
Пример 3.22. Процесс, принимающий сообщение по одному из двух каналов лев1 и лев2 и немедленно передающий его направо:
aлев1 = aлев2 = aправ
СЛИЯНИЕ = (лев1 ? х → прав ! х → СЛИЯНИЕ
| лев2 ? х → прав ! х → СЛИЯНИЕ).
Дата добавления: 2015-07-18; просмотров: 601;