В теоретической информатике π - исчисление (или пи-исчисление ) является исчислением процессов . π -исчисление позволяет передавать имена каналов по самим каналам, и таким образом оно способно описывать параллельные вычисления , конфигурация сети которых может меняться в ходе вычисления.
π - исчисление имеет мало терминов и является небольшим, но выразительным языком (см. § Синтаксис). Функциональные программы могут быть закодированы в π -исчислении, и кодирование подчеркивает диалоговую природу вычислений, проводя связи с игровой семантикой . Расширения π -исчисления, такие как spi-исчисление и прикладное π , были успешными в рассуждениях о криптографических протоколах . Помимо первоначального использования для описания параллельных систем, π -исчисление также использовалось для рассуждений о бизнес-процессах [1] и молекулярной биологии . [2]
π -исчисление принадлежит к семейству исчислений процессов , математических формализмов для описания и анализа свойств параллельных вычислений. Фактически, π - исчисление, как и λ-исчисление , настолько минимально, что не содержит примитивов, таких как числа, булевы значения, структуры данных, переменные, функции или даже обычные операторы управления потоком (такие как , ).if-then-else
while
Центральным в π -исчислении является понятие имени . Простота исчисления заключается в двойной роли, которую играют имена как каналы связи и переменные .
Конструкции процессов, доступные в исчислении, следующие [3] (точное определение дано в следующем разделе):
c
goto c
goto c
c
goto c
Хотя минимализм π -исчисления не позволяет нам писать программы в обычном смысле, его легко расширить. В частности, легко определить как управляющие структуры, такие как рекурсия, циклы и последовательная композиция, так и типы данных, такие как функции первого порядка, значения истинности , списки и целые числа. Более того, были предложены расширения π -исчисления , которые учитывают распределение или криптографию с открытым ключом. Прикладное π -исчисление Абади и Фурнета [1] поставило эти различные расширения на формальную основу, расширив π -исчисление произвольными типами данных.
Ниже приведен небольшой пример процесса, состоящего из трех параллельных компонентов. Имя канала x известно только первым двум компонентам.
Первые два компонента могут общаться по каналу x , а имя y становится связанным с z . Поэтому следующим шагом в процессе является
Обратите внимание, что оставшийся y не затронут, поскольку он определен во внутренней области. Второй и третий параллельные компоненты теперь могут общаться по имени канала z , а имя v становится привязанным к x . Теперь следующим шагом в процессе является
Обратите внимание, что поскольку локальное имя x было выведено, область действия x расширяется, чтобы охватить и третий компонент. Наконец, канал x может быть использован для отправки имени x . После этого все параллельно выполняющиеся процессы останавливаются
Пусть Χ — множество объектов, называемых именами . Абстрактный синтаксис для π -исчисления строится на основе следующей грамматики BNF (где x и y — любые имена из Χ): [4]
В конкретном синтаксисе ниже префиксы связываются более тесно, чем параллельное сочинение (|), а скобки используются для устранения неоднозначности.
Имена связаны конструкциями ограничения и входного префикса. Формально множество свободных имен процесса в π -исчислении определяется индуктивно с помощью таблицы ниже. Множество связанных имен процесса определяется как имена процесса, которые не входят в множество свободных имен.
Построить | Бесплатные имена |
---|---|
Никто | |
a ; x ; все свободные имена P | |
а ; свободные имена P, за исключением x | |
Все свободные имена P и Q | |
Свободные имена P, кроме x | |
Все свободные имена P |
Центральным как для редукционной семантики, так и для маркированной семантики перехода является понятие структурной конгруэнтности . Два процесса структурно конгруэнтны, если они идентичны с точностью до структуры. В частности, параллельная композиция коммутативна и ассоциативна.
Точнее, структурная конгруэнтность определяется как наименьшее отношение эквивалентности, сохраняемое конструкциями процесса и удовлетворяющее:
Альфа-преобразование :
Аксиомы параллельной композиции :
Аксиомы для ограничения :
Аксиома репликации :
Аксиома, связывающая ограничение и параллельность :
Эта последняя аксиома известна как аксиома "расширения области действия". Эта аксиома является центральной, поскольку она описывает, как связанное имя x может быть вытеснено выходным действием, что приводит к расширению области действия x . В случаях, когда x является свободным именем , может использоваться альфа-преобразование, чтобы разрешить продолжение расширения.
Мы пишем , если может выполнить шаг вычисления, после чего теперь . Это отношение редукции определяется как наименьшее отношение, замкнутое по набору правил редукции.
Основное правило редукции, которое отражает способность процессов общаться через каналы, следующее:
Есть три дополнительных правила:
Последнее правило гласит, что структурно конгруэнтные процессы имеют одинаковые редукции.
Рассмотрим еще раз процесс
Применяя определение семантики редукции, получаем редукцию
Обратите внимание, что, применяя аксиому замены-редукции, свободные вхождения теперь помечаются как .
Далее получаем сокращение
Обратите внимание, что поскольку локальное имя x было выведено, область действия x расширяется, чтобы охватить и третий компонент. Это было зафиксировано с помощью аксиомы расширения области действия.
Далее, используя аксиому редукции-подстановки, получаем
Наконец, используя аксиомы параллельной композиции и ограничения, получаем
В качестве альтернативы можно дать исчислению числа Пи маркированную семантику перехода (как это было сделано с исчислением коммуникационных систем ).
В этой семантике переход из состояния в некоторое другое состояние после действия обозначается как:
Где состояния и представляют процессы и являются либо входным действием , либо выходным действием , либо молчаливым действием τ . [5]
Стандартный результат относительно маркированной семантики заключается в том, что она согласуется с редукционной семантикой вплоть до структурной конгруэнтности, в том смысле, что тогда и только тогда, когда [6]
Приведенный выше синтаксис является минимальным. Однако синтаксис может быть изменен различными способами.
В синтаксис можно добавить оператор недетерминированного выбора .
В синтаксис можно добавить проверку на равенство имен . Этот оператор сопоставления может выполняться так, как если и только если x и являются одним и тем же именем. Аналогично можно добавить оператор несоответствия для неравенства имен . Практические программы, которые могут передавать имена (URL или указатели), часто используют такую функциональность: для непосредственного моделирования такой функциональности внутри исчисления это и связанные с ним расширения часто полезны.
Асинхронное π -исчисление [7] [8] допускает только выходы без продолжения, т. е. выходные атомы формы , что приводит к меньшему исчислению. Однако любой процесс в исходном исчислении может быть представлен меньшим асинхронным π -исчислением, использующим дополнительный канал для имитации явного подтверждения от принимающего процесса. Поскольку выход без продолжения может моделировать сообщение в пути, этот фрагмент показывает, что исходное π -исчисление, которое интуитивно основано на синхронной коммуникации, имеет выразительную асинхронную модель коммуникации внутри своего синтаксиса. Однако недетерминированный оператор выбора, определенный выше, не может быть выражен таким образом, поскольку незащищенный выбор будет преобразован в защищенный; этот факт использовался для демонстрации того, что асинхронное исчисление строго менее выразительно, чем синхронное (с оператором выбора). [9]
Полиадическое π -исчисление позволяет передавать более одного имени в одном действии: (полиадический вывод) и (полиадический ввод) . Это полиадическое расширение, которое особенно полезно при изучении типов для процессов передачи имен, может быть закодировано в монадическом исчислении путем передачи имени частного канала, через который затем последовательно передаются множественные аргументы. Кодирование определяется рекурсивно предложениями
кодируется как
кодируется как
Все остальные конструкции процесса кодированием остаются неизменными.
В приведенном выше примере обозначает кодирование всех префиксов в продолжении одинаковым образом.
Полная мощность репликации не нужна. Часто рассматривается только реплицированный ввод , структурная аксиома конгруэнтности которого — .
Процесс реплицированного ввода, который можно понимать как серверы, ожидающие вызова клиентов на канале x . Вызов сервера порождает новую копию процесса , где a — имя, переданное клиентом серверу во время вызова последнего.
Можно определить π -исчисление более высокого порядка , где не только имена, но и процессы передаются по каналам. Ключевое правило сокращения для случая более высокого порядка:
Здесь обозначает переменную процесса , которая может быть инстанциирована термином процесса. Санджорджи установил, что возможность передачи процессов не увеличивает выразительность π -исчисления: передача процесса P может быть смоделирована простой передачей имени, которое указывает на P.
π - исчисление является универсальной моделью вычислений . Это впервые было отмечено Милнером в его статье «Функции как процессы» [10] , в которой он представляет две кодировки лямбда-исчисления в π -исчислении. Одна кодировка имитирует стратегию оценки «eager» (вызов по значению) , другая кодировка имитирует стратегию «normal-order» (вызов по имени). В обеих из них решающим пониманием является моделирование привязок среды — например, « x привязан к терму » — как реплицирующихся агентов, которые отвечают на запросы своих привязок, отправляя обратно соединение к терму .
Особенности π -исчисления, которые делают эти кодировки возможными, — это передача имен и репликация (или, что эквивалентно, рекурсивно определенные агенты). При отсутствии репликации/рекурсии π -исчисление перестает быть полным по Тьюрингу. Это можно увидеть по тому факту, что эквивалентность бисимуляции становится разрешимой для безрекурсивного исчисления и даже для конечно-контролируемого π -исчисления, где число параллельных компонентов в любом процессе ограничено константой. [11]
Что касается исчислений процессов, то π -исчисление допускает определение эквивалентности бисимуляции. В π -исчислении определение эквивалентности бисимуляции (также известной как биподобие) может основываться либо на семантике редукции, либо на семантике маркированного перехода.
Существует (по крайней мере) три различных способа определения эквивалентности маркированной бисимуляции в π -исчислении: раннее, позднее и открытое биподобие. Это вытекает из того факта, что π -исчисление является исчислением процесса передачи значений.
В оставшейся части этого раздела мы будем обозначать процессы и бинарные отношения над процессами.
Раннее и позднее биподобие были сформулированы Милнером, Парроу и Уокером в их оригинальной статье о π -исчислении. [12]
Бинарное отношение над процессами является ранней бисимуляцией , если для каждой пары процессов ,
Процессы и называются ранними бисимуляционными, если они соответствуют паре для некоторой ранней бисимуляции .
В поздней бисимуляции соответствие перехода должно быть независимым от передаваемого имени. Бинарное отношение над процессами является поздней бисимуляцией, если для каждой пары процессов ,
Процессы и называются поздними бисимуляционными, если они соответствуют паре для некоторой поздней бисимуляции .
Оба и страдают от проблемы, что они не являются отношениями конгруэнтности в том смысле, что они не сохраняются всеми конструкциями процесса. Точнее, существуют процессы и такие, что но . Эту проблему можно исправить, рассмотрев максимальные отношения конгруэнтности, включенные в и , известные как ранняя конгруэнтность и поздняя конгруэнтность соответственно.
К счастью, возможно третье определение, которое позволяет избежать этой проблемы, а именно определение открытого биподобия , предложенное Санджорджи. [13]
Бинарное отношение над процессами является открытой бисимуляцией, если для каждой пары элементов , для каждой подстановки имени и каждого действия , всякий раз, когда то существует такое , что и .
Процессы и называются открытыми биподобными, если они соответствуют паре для некоторой открытой бисимуляции .
Раннее, позднее и открытое бисимиларитмическое сходство различны. Контейнменты правильные, поэтому .
В некоторых подвычислениях, таких как асинхронное пи-исчисление, поздняя, ранняя и открытая бисимуляция, как известно, совпадают. Однако в этой ситуации более подходящим понятием является асинхронная бисимуляция . В литературе термин открытая бисимуляция обычно относится к более сложному понятию, где процессы и отношения индексируются отношениями различия; подробности см. в статье Санджорджи, цитируемой выше.
В качестве альтернативы можно определить эквивалентность бисимуляции непосредственно из семантики редукции. Мы пишем, если процесс немедленно разрешает ввод или вывод по имени .
Бинарное отношение над процессами является колючей бисимуляцией, если это симметричное отношение, которое удовлетворяет условию, что для каждой пары элементов мы имеем, что
и
такой что .
Мы говорим, что и являются колюче-бисимулятивными, если существует колючая бисимуляция , где .
Определяя контекст как π -терм с дыркой [], мы говорим, что два процесса P и Q являются колючими конгруэнтными , записанными , если для каждого контекста мы имеем, что и колючими биподобны. Оказывается, что колючая конгруэнтность совпадает с конгруэнтностью, вызванной ранней биподобностью.
π - исчисление использовалось для описания множества различных видов параллельных систем. Фактически, некоторые из последних приложений лежат за пределами области традиционной компьютерной науки.
В 1997 году Мартин Абади и Эндрю Гордон предложили расширение π -исчисления, Spi-исчисление, как формальную нотацию для описания и рассуждений о криптографических протоколах. Spi-исчисление расширяет π -исчисление примитивами для шифрования и дешифрования. В 2001 году Мартин Абади и Седрик Фурне обобщили обработку криптографических протоколов для создания прикладного π -исчисления. В настоящее время существует большой объем работ, посвященных вариантам прикладного π -исчисления, включая ряд экспериментальных инструментов проверки. Одним из примеров является инструмент ProVerif [2] Бруно Бланше, основанный на переводе прикладного π -исчисления в структуру логического программирования Бланше. Другим примером является Cryptyc [3] Эндрю Гордона и Алана Джеффри, который использует метод утверждений о соответствии Ву и Лэма в качестве основы для систем типов, которые могут проверять свойства аутентификации криптографических протоколов.
Около 2002 года Говард Смит и Питер Фингар заинтересовались тем, что π -исчисление станет инструментом описания для моделирования бизнес-процессов. К июлю 2006 года в сообществе идет обсуждение того, насколько полезным это может быть. Совсем недавно π -исчисление сформировало теоретическую основу языка моделирования бизнес-процессов (BPML) и XLANG от Microsoft. [14]
π - исчисление также привлекло интерес молекулярной биологии. В 1999 году Авив Регев и Эхуд Шапиро показали, что можно описать клеточный сигнальный путь (так называемый каскад RTK / MAPK ) и, в частности, молекулярный «lego», который реализует эти задачи коммуникации в расширении π -исчисления. [2] После этой основополагающей работы другие авторы описали всю метаболическую сеть минимальной клетки. [15] В 2009 году Энтони Нэш и Сара Калвала предложили структуру π -исчисления для моделирования передачи сигнала, которая направляет агрегацию Dictyostelium discoideum . [16]
π - исчисление было первоначально разработано Робином Милнером , Иоахимом Парроу и Дэвидом Уокером в 1992 году на основе идей Уффе Энгберга и Могенса Нильсена. [17] Его можно рассматривать как продолжение работы Милнера над исчислением процессов CCS ( исчисление коммуницирующих систем ). В своей лекции Тьюринга Милнер описывает разработку π -исчисления как попытку зафиксировать единообразие значений и процессов в акторах. [18]
Следующие языки программирования реализуют π -исчисление или один из его вариантов: