Меню
Главная
Случайная статья
Настройки
|
-исчисление в теоретической информатике — исчисление процессов, изначально разработанное Робином Милнером, Иоахимом Пэрроу и Дэвидом Уокером как продолжение работы над исчислением общающихся систем. Целью -исчисления является возможность описать параллельные вычисления, конфигурация которых может меняться на протяжении вычисления.
Содержание
Неформальное определение
-исчисление принадлежит к семейству исчислений процессов. Фактически -исчисление как -исчисление настолько минимально, что не содержит примитивов, таких как числа, булевы выражения, структуры данных, переменные, функции или операторы управления потоком (например, if-then-else, while).
-исчисление определяет динамически взаимодействующие друг с другом параллельные процессы. Каждый процесс может состоять из одного или нескольких действий, расположенных последовательно или параллельно, а также альтернативно или рекурсивно. Действием может быть отправка или получение данных по каналу. Сообщение от одного процесса другому включает имя канала, который может быть использован для ответа. Имя является переменной[1].
Можно также сказать, что -исчисление — это открытая теория, которая зависит от некоторой теории имен. Например, с операционной точки зрения -исчислении можно представить как процедуру, которая для данной теории имен даёт теорию процессов над этими именами[2].
Конструкции процесса
Центральным для -исчисления является понятие имени. Простота исчисления заключается в двойной роли имён, которые выступают и как каналы связи и как переменные. В исчислении доступны следующие конструкции процесса (точные определения даны в следующих секциях):
- конкуренция, обозначается , где и — два процесса или потока, выполняемых конкурентно.
- связь, где
- префикс ввода — процесс, ожидающий сообщение, отправленное по каналу связи , перед тем как продолжаться как , привязывающий полученное имя к имени . Как правило, это моделирует процесс ожидания связи из сети, или метку
c , которую можно использовать с помощью операции goto c .
- префикс вывода описывает, что имя передаётся через канал , перед тем как продолжаться как . Как правило, это моделирует отправку сообщения через сеть или операцию
goto c .
- репликация, обозначается , которая может быть рассмотрена как процесс, который может всегда создавать новую копию . Как правило, эти модели или сетевой сервис или метка
c , ожидающая любое число goto c операций.
- создание нового имени, обозначается , которое может быть рассмотрено как процесс, размещающий новую константу внутри . Константы -исчисления определяются только через своё имя и всегда являются каналами связи.
- ноль процесс, обозначается 0, процесс, выполнение которого завершено и остановлено.
Минимализм -исчисления не позволяет писать программы в обычном смысле этого слова, но исчисление можно легко расширить. В частности, просто определить структуры управления (такие как рекурсия, циклы и последовательная композиция) и типы данных (такие как функции первого порядка, значения истинности, списки и целые числа). Кроме того, были предложены расширения -исчисления для криптографии с публичным ключом. Прикладное -исчисление, разработанное Абади и Фурне, даёт этим различным расширениям -исчисления формальную основу с помощью произвольных типов данных.
Небольшой пример
Ниже приведён пример процесса из трёх параллельных компонент. Канал известен только в двух первых компонентах.
Первые две компоненты способны связываться через канал , при этом связывается с . Следующий шаг процесса:
В этом примере не затрагивается, так как он определён во внутренней области видимости. Теперь вторая и третья параллельные компоненты могут связаться через канал , при этом связывается с . Следующий шаг процесса:
Обратите внимание, что, поскольку локальное имя было выведено, область действия расширена, чтобы охватить также третью компоненту. Наконец, канал можно использовать для отправки имени . После чего все процессы останавливаются.
Формальное определение
Применение
|
|