Наш интерес к π-исчислению заключается в том, что оно является предшественником ρ-исчисления. Это модель параллельных вычислений или, точнее, исчисление процессов, основанное на понятии именования. В исчислении процессов мы представляем взаимодействие между независимыми агентами или процессами как передачу сообщений, а не модификации общих переменных (как в λ-исчислении).

π-исчисление отличается от λ-исчисления различием между именами и процессами и добавлением конструкторов терминов, включая параллельную композицию, которая отвечает за параллелизм. Итак, в π-исчислении есть две разные сущности, процессы и имена, а также разные взаимодействия между процессами и именами. Однако, как и λ-термы, процессы в π-исчислении строятся из имен.

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

В этом посте мы обсудим грамматику, структурную конгруэнтность и операционную семантику π-исчисления.

π-исчисление

Здесь мы обсудим упрощенную версию π-исчисления, предложенную Робином Милнером [1].

Грамматика

Представление BNF грамматики для π-исчисления

P,Q ::= 0 | x(y).P | x̅⟨y⟩.P | (𝜈x)P | P|Q | !P (1.1)

очень похоже на λ-исчисление, является параметрическим в наборе имен X. Даже не зная, что означают эти операторы, мы уже знаем, что можем написать

P[X] ::= 0 | X(X).P[X] | X̅⟨X⟩.P[X] | (𝜈X)P[X] | P[X]|P[X] | !P[X]

чтобы явно выразить эту зависимость от X.

Возвращаясь к (1.1), допустимые термы в этой грамматике, т. е. выражения в правой части этого представления, также называются конструкторами термов. Мы обсудим эти конструкторы терминов ниже.

Остановленный процесс: 0

P,Q ::= 0 | x(y).P | x̅⟨y⟩.P | (νx)P | P|Q | !P

Этот процесс представляет собой «ничего не делать», т. е. выполнение завершено и остановлено.

Защищенное вводом продолжение или входной префикс: x(y).P

P,Q ::= 0 | x(y).P | x̅⟨y⟩.P | (νx)P | P|Q | !P

Этот процесс ожидает, пока имя, отправленное по каналу x, заменит имя y в процессе P. Это играет аналогичную роль абстракции имени y, λy.P в λ-исчислении, связывая имя y в процессе P. .

Отправьте на канал и выполните или введите префикс вывода: x̅⟨y⟩.P

P,Q ::= 0 | x(y).P | x̅⟨y⟩.P | (νx)P | P|Q | !P

Отправляет имя y на канал x в качестве подстановочного имени в процессе с защитой ввода, ожидающем на канале x, а затем запускает P.

Ограничение или создание нового имени: (νx)P

P,Q ::= 0 | x(y).P | x̅⟨y⟩.P | (νx)P | P|Q | !P

(νx)P – читать «новый x в P» – определяет x как новое имя и связывает его в процессе P.

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

P,Q ::= 0 | x(y).P | x̅⟨y⟩.P | (νx)P | P|Q | !P

П | Q — читать «P par Q» — означает, что процессы P и Q активны одновременно; они могут действовать независимо или общаться друг с другом.

Репликация: !P

P,Q ::= 0 | x(y).P | x̅⟨y⟩.P | (νx)P | P|Q | !P

!P – читается как «bang P» – означает P | П | …; столько копий, сколько пожелаете. Этот процесс всегда может создать новую копию P. Правила сокращения позволяют избежать риска бесконечной параллельной активности.

Каждый процесс в π-исчислении строится из остановленного процесса 0. Давайте построим несколько простых процессов.

0

Это простейший процесс, из которого создаются все остальные процессы.

x(y).0

Этот процесс ожидает сообщения y на канале x и затем останавливается.

x̅⟨y⟩.0

Этот процесс отправляет сообщение y по каналу x и затем останавливается.

(𝜈x)0

Этот процесс объявляет новое имя x в остановленном процессе.

Как вы думаете, это должно соответствовать процессу, который у нас уже есть?

0 | 0

Остановленный процесс выполняется одновременно с остановленным процессом.

Как вы думаете, это должно соответствовать процессу, который у нас уже есть?

x̅⟨y⟩.0 | x(z).0

Этот процесс одновременно отправляет и получает сообщение по каналу x. Так происходит общение!

Одновременная отправка и получение сообщений по одному и тому же каналу позволяет осуществлять связь по этому каналу. В общем случае процесс x̅⟨y⟩.P | x(z).Qсоответствует связи по каналу x. Говорят, что x и x̅ находятся в отношениях имя/совместное имя.

Структурное соответствие

Интуитивно мы ожидаем эквивалентности между некоторыми процессами. Например, P | 0, 0 | P и P должны быть эквивалентны. Подумай об этом.

Процесс Р | 0 означает, что мы запускаем процесс P одновременно с остановленным процессом 0. Это ничем не отличается от запуска процесса P отдельно. Вообще говоря, мы обозначаем структурную конгруэнтность процессов P и Q как P ≡ Q. Наши интуитивные представления кодифицируются следующими аксиомами структурной конгруэнтности.

α-эквивалентность:

P ≡ Q , если Q можно получить из P переименованием одного или нескольких имен, связанных в P (мы более подробно обсудим свободные и связанные имена позже в этой серии). Это аналогично α-преобразованию в λ-исчислении. Это означает, что две программы эквивалентны, если они отличаются только именами переменных, используемых внутри. Они выполняют один и тот же код, но, возможно, последовательно называют вещи разными именами.

Аксиомы параллельной композиции:

– P | Q ≡ Q | P

Порядок, в котором мы перечисляем параллельные процессы, не должен иметь значения, потому что они выполняются одновременно. Следовательно, процессы P | Q и Q | P эквивалентны.

– (P | Q) | R ≡ P | (Q | R)

Оператор par должен быть ассоциативным. Мы всегда говорим только об «объединении» двух процессов вместе, поэтому, если мы хотим добавить в смесь третий процесс, есть два различных способа сделать это. Эта эквивалентность говорит, что эти два способа одинаковы, потому что мы запускаем эти процессы одновременно.

– P | 0 ≡ P

Запуск остановленного процесса вместе с другим процессом P не должен отличаться от запуска P в одиночку. Эта эквивалентность говорит именно об этом. Объединение процесса с остановленным процессом аналогично добавлению числа 0.

Аксиомы ограничения:

– (𝜈x)(𝜈y)P ≡ (𝜈y)(𝜈x)P

При объявлении новых имен в процессе порядок не должен иметь значения. Эта эквивалентность отражает это понятие.

– (𝜈x)0 ≡ 0

Объявление нового имени в остановленном процессе ничего не должно делать. Поэтому он должен быть эквивалентен остановленному процессу.

Аксиома репликации:

– !P ≡ P | !P

При репликации процесса мы всегда можем создать новую копию процесса. Следовательно, процессы !P и P | !P эквивалентны.

Аксиома, касающаяся ограничения и параллельности:

Если имя x связано в Q, то (νx)(P | Q) ≡ (νx)P | В.

Это свойства структурной конгруэнтности в π-исчислении. Структурная конгруэнтность отражает понятие вычислительной неразличимости. То есть два структурно конгруэнтных процесса идентичны с вычислительной точки зрения.

Структурная конгруэнтность является примером того, что в математике называется отношением эквивалентности. Мы рассматриваем это как вычислительную эквивалентность процессов.

Теперь мы уточним понятие коммуникации в π-исчислении и обсудим операционную семантику.

Операционная семантика, т.е. правила редукции

Напомним, что префикс представляет отправку сообщения y по каналу x, а префикс x(z) представляет получение сообщения z по каналу x. Идея заключается в том, что когда отправка и получение по одному и тому же каналу происходят одновременно, происходит связь, и получатель затем использует переданную информацию. Символами это написано

x̅⟨y⟩.P | x(z).Q → P | Q{y/z}

→ — это обозначение для «сводится к», и мы называем это сокращением связи или правилом связи. Это означает, что если мы обнаружим, что два процесса x̅⟨y⟩.P и x(z).Q выполняются одновременно, то y отправляется по каналу x, y заменяет z в процессе Q, а процессы P и Q{y/z } работать одновременно. Это аналогично β-редукции в λ-исчислении. Это так важно, я напишу это дважды

Правило связи:

x̅⟨y⟩.P | x(z).Q → P | Q{y/z}

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

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

Если P → Q, то P | Р → В | Р.

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

Если P → Q, то (𝜈x)P → (𝜈x)Q.

Структурное соответствие:

Если P ≡ P’, Q ≡ Q’ и P’ → Q’, то P → Q.

Мы должны получить наши ноги с некоторыми примерами.

Примеры

(i) x̅⟨y⟩.0 | x(z).P | Q → P{y/z} | Q

Доказательство: первые два процесса, x̅⟨y⟩.0 и x(z).P, сообщатся, чтобы дать нам

x̅⟨y⟩.0 | x(z).P → 0 | P{y/z}

и у нас есть это 0 | P{y/z} ≡ P{y/z}. По тому, как правило comm взаимодействует с параллельной композицией, мы теперь получаем

x̅⟨y⟩.0 | x(z).P | Q → P{y/z} | Q

(ii) x̅⟨y⟩.0 | х(и).Р | x(v).Q не сводится однозначно

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

P{y/u} | x(v).Q

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

x(u).P | Q{y/v}

(iii) (νx)(x̅⟨y⟩.0 | x(z).P) | x(u).Q → P{y/z} | х(и).Q

Доказательство. Ограничение имени x первыми двумя терминами в параллельной композиции приводит к уникальному сокращению в этом случае, в отличие от предыдущего примера. Здесь имя x, ограниченное (νx), отличается от имени x, входящего в терм x(u).Q. Следовательно, только первые два члена comm приводят к сокращению

P{y/z} | x(u).Q

(iv) !x̅⟨y⟩.0 | x(u).P→ !x̅⟨y⟩.0 | P{y/u}

Доказательство: мы знаем, что !x̅⟨y⟩.0 ≡ !x̅⟨y⟩.0 | x̅⟨y⟩.0, потому что репликация всегда позволяет создать другую копию. Теперь у нас есть связь между x̅⟨y⟩.0 и x(u).P, которая, как мы видели, сводится к P{y/u}. Таким образом, нам остается

!x̅⟨y⟩.0 | P{y/u}

Подводя итог, π-исчисление — это параллельная модель вычислений, основанная на понятии именования, в которой мы представляем взаимодействия между агентами как передачу сообщений. Эта передача сообщений происходит, когда у нас есть параллельные процессы отправки и получения на одном и том же канале. В π-исчислении мы делаем различие между именами и процессами, и у нас есть возможность выполнять вычисления одновременно. Это основные отличия λ-исчисления.

Полную версию π-исчисления см. в [1]. Мы не обсуждали оператор выбора и нормальные процессы, потому что при введении π-исчисления мы намеревались исследовать параллелизм и то, как он обрабатывается в грамматике.

Цели этой серии учебников по вычислительным исчислениям состоят в том, чтобы представить ρ-исчисление и заложить основу для лекций DoCC. Мы достигнем обеих целей в следующей статье.