# Interaktionsnetze

Interaktionsnetze sind ein graphisches Berechnungsmodell, das 1990 vom französischen Mathematiker Yves Lafont als Verallgemeinerung der Beweisstrukturen der linearen Logik entwickelt wurde.
Ein Interaktionsnetzsystem wird durch eine Menge von Agententypen und eine Menge von Interaktionsregeln spezifiziert. Interaktionsnetze sind ein inhärent verteiltes Berechnungsmodell, da Berechnungen gleichzeitig in vielen Teilen eines Interaktionsnetzes stattfinden können, ohne dass eine Synchronisation erforderlich ist. Letzteres wird durch die starke Konfluenz-Eigenschaft der Reduktion in diesem Berechnungsmodell garantiert. Dadurch bieten Interaktionsnetze eine natürliche Sprache für massive Parallelität. Sie bilden das Fundament vieler Implementierungen des Lambda-Kalküls, wie etwa effizienter geschlossener Reduktion und optimaler Reduktion im Sinne von Lévy, wie in Lambdascope.

## Definitionen

Interaktionsnetze sind ungerichtete Graphen mit beschrifteten Knoten. Die Knoten werden auch Agenten genannt.
Ein Agent vom Typ α mit Stelligkeit ${\text{ar}}(\alpha )=n\geq 0$ besitzt einen Hauptport und $n$ Nebenports. Jeder Port kann mit höchstens einer Kante verbunden sein, und jede Kante verbindet genau zwei Ports. Nicht mit einer Kante verbundene Ports werden als freie Ports bezeichnet. Die Menge aller freien Ports bildet die Schnittstelle eines Interaktionsnetzes. Alle Agententypen gehören zu einer Menge $\Sigma$, die als Signatur bezeichnet wird.
Ein Interaktionsnetz, das ausschließlich aus Kanten besteht, wird als Verdrahtung ("Wiring") bezeichnet und üblicherweise mit $\omega$ notiert. Ein Baum $t$ mit Wurzel $x$ wird induktiv entweder als einzelne Kante $x$ definiert oder als Agent α mit seinem freien Hauptport x sowie seinen Nebenports $x_{i}$, die mit den Wurzeln anderer Bäume $t_{i}$ verbunden sind.
Graphisch lassen sich die primitiven Strukturen von Interaktionsnetzen wie folgt darstellen:
Wenn zwei Agenten über ihre Hauptports miteinander verbunden sind, bilden sie ein aktives Paar. Für aktive Paare können Interaktionsregeln definiert werden, die beschreiben, wie das aktive Paar umgeschrieben wird. Ein Interaktionsnetz ohne aktive Paare befindet sich in Normalform. Eine Signatur $\Sigma$ (mit einer darauf definierten Abbildung ${\text{ar}}:\Sigma \rightarrow \mathbb {N}$) zusammen mit einer Menge von Interaktionsregeln für Agenten $\alpha \in \Sigma$ bildet ein Interaktionssystem.

## Interaktionskalkül

Die textuelle Repräsentation von Interaktionsnetzwerken wird als Interaktionskalkül bezeichnet und kann als Programmiersprache betrachtet werden.
Im Interaktionskalkül entsprechen induktiv definierte Bäume Termen der Form $t::=\alpha (t_{1},\dots ,t_{n})\ |\ x$, wobei $x$ als Name bezeichnet wird.
Jedes Interaktionsnetz $N$ kann unter Verwendung der zuvor definierten Verdrahtungs- und Baumprimitive wie folgt in ein äquivalentes Netz umgeschrieben werden:
Im Interaktionskalkül beschreibt eine Konfiguration eine "Momentaufnahme" eines Interaktionsnetzes.
Eine Konfiguration im Interaktionskalkül hat die Form:
$c\equiv \langle t_{1},\dots ,t_{m}\ |\ v_{1}=w_{1},\dots ,v_{n}=w_{n}\rangle$
und besteht aus zwei Teilen:
* Schnittstelle (links vom Trennstrich): Eine geordnete Liste von Termen $t_{1},...,t_{m}$, die die "externen Anschlüsse" des Netzes darstellen.
* Gleichungen (rechts vom Trennstrich): Eine ungeordnete Multimenge von Gleichungen $v_{1}=w_{1},\dots ,v_{n}=w_{n}$, die die internen Verbindungen des Netzes darstelle. Wie zuvor beschrieben, meint $\omega$ hierbei eine Verdrahtung. Wichtig ist, dass jeder Name in der Verdrahtung genau zweimal vorkommen muss.
Genau wie im Lambda-Kalkül sind im Interaktionskalkül die Konzepte der α-Konversion und der Substitution natürlich auf Konfigurationen definiert. Insbesondere können beide Vorkommen eines Namens durch einen neuen Namen ersetzt werden, sofern dieser nicht bereits in der gegebenen Konfiguration vorkommt. Konfigurationen werden bis auf α-Konversion als äquivalent betrachtet.
Die Substitution $t[x:=u]$ ist das Ergebnis des Ersetzens des Namens $x$ in einem Term $t$ durch einen anderen Term $u$, sofern $x$ genau einmal im Term $t$ vorkommt.
Jede Interaktionsregel kann wie folgt graphisch dargestellt werden:
Hier werden $\alpha ,\beta \in \Sigma$, sowie das Interaktionsnetz $N$ in der Mitte, durch die Nutzung von Verdrahtungs- und Baumprimitiven in ein equivalentes Netz umgeschrieben, um sie mittels Lafonts Notation im Interaktionskalkül als $\alpha [v_{1},\dots ,v_{m}]\bowtie \beta [w_{1},\dots ,w_{n}]$ darzustellen.
Wenn $\alpha [v_{1},\dots ,v_{m}]\bowtie \beta [w_{1},\dots ,w_{n}]$, dann wird die Reduktion $\langle {\vec {t}}\ |\ \alpha (t_{1},\dots ,t_{m})=\beta (u_{1},\dots ,u_{n}),\Delta \rangle \rightarrow \langle {\vec {t}}\ |\ t_{1}=v_{1},\dots ,t_{m}=v_{m},u_{1}=w_{1},\dots ,u_{n}=w_{n},\Delta \rangle$ eine Interaktion genannt.
Hat eine der Gleichungen die Form $x=u$, so kann eine Indirektion angewandt werden:
$\langle \dots t\dots \ |\ x=u,\Delta \rangle \rightarrow \langle \dots t[x:=u]\dots \ |\ \Delta \rangle$
oder
$\langle {\vec {t}}\ |\ x=u,t=w,\Delta \rangle \rightarrow \langle {\vec {t}}\ |\ t[x:=u]=w,\Delta \rangle$.
Eine Gleichung der Form $x=t$ heißt Deadlock, wenn der Name $x$ in $t$ vorkommt. Grundsätzlich werden nur Deadlock-freie Interaktionsnetze betrachtet. Gemeinsam definieren Interaktion und Indirektion die Reduktionsrelation auf Konfigurationen. Die Tatsache, dass eine Konfiguration $c$ zu ihrer Normalform $c'$ reduziert, wobei keine Gleichungen mehr übrig sind, wird als $c\downarrow c'$ notiert.

## Eigenschaften

Interaktionsnetze profitieren von den folgenden Eigenschaften, welche gemeinsam massive Parallelisierung ermöglichen:
* Lokalität: Nur aktive Paare können ersetzt werden.
* Linearität: Umformungsregeln können in konstanter Zeit angewendet werden.
* Starke Konfluenz: Wenn zwei Reduktionen $c\rightarrow c_{1}$und $c\rightarrow c_{2}$ existieren, dann gibt es mindestens eine Konfiguration $c'$, sodass $c_{1}\rightarrow c'$ und $c_{2}\rightarrow c'$.

## Interaktionskombinatoren

Eines der primitivsten Interaktionsysteme, welches immer noch mächtig genug ist, um alle anderen Interaktionsysteme zu simulieren, ist das System der Interaktionskombinatoren.
Die Signatur dieses Systems ist $\Sigma =\{\epsilon ,\delta ,\gamma \}$, wobei ${\text{ar}}(\epsilon )=0$ und ${\text{ar}}(\delta )={\text{ar}}(\gamma )=2$.
Die Interaktionsregeln lauten:
* Löschung: $\epsilon \bowtie \alpha [\epsilon ,\dots ,\epsilon ]$
* Duplikation: $\delta [\alpha (x_{1},\dots ,x_{n}),\alpha (y_{1},\dots ,y_{n})]\bowtie \alpha [\delta (x_{1},y_{1}),\dots ,\delta (x_{n},y_{n})]$
* Annihilation: $\delta [x,y]\bowtie \delta [x,y]$ sowie $\gamma [x,y]\bowtie \gamma [y,x]$
Die Anwendungen der Löschung und Duplikation sind in (a) und (b) in der folgenden Grafik dargestellt.
Rechts im Bild ist ein nicht-terminierendes Netz zu sehen, welches durch Anwendung der Interaktionsregeln nach drei Schritten wieder in die ursprüngliche Konfiguration reduziert wird, und somit nie eine Normalform erreichen kann. Diese endlose Sequenz an Reduktionen lautet im Interaktionskalkül folgendermaßen:
${\begin{aligned}&\langle \varnothing \ |\ \delta (\epsilon ,x)=\gamma (x,\epsilon )\rangle \rightarrow \\&\langle \varnothing \ |\ \epsilon =\gamma (x_{1},x_{2}),\ x=\gamma (y_{1},y_{2}),\ x=\delta (x_{1},y_{1}),\ \epsilon =\delta (x_{2},y_{2})\rangle \rightarrow ^{*}\\&\langle \varnothing \ |\ x_{1}=\epsilon ,\ x_{2}=\epsilon ,\ x=\gamma (y_{1},y_{2}),\ x=\delta (x_{1},y_{1}),\ x_{2}=\epsilon ,\ y_{2}=\epsilon \rangle \rightarrow ^{*}\\&\langle \varnothing \ |\ \delta (\epsilon ,x)=\gamma (x,\epsilon )\rangle \rightarrow \dots \end{aligned}}$

## Nicht-deterministische Erweiterung

Interaktionsnetze sind im Wesentlichen deterministisch und können nicht direkt verwendet werden, um nicht-deterministische Berechnungen zu modellieren. Um nicht-deterministische Wahl auszudrücken, müssen Interaktionsnetze erweitert werden. Es reicht aus einen einzelnen Agenten, hier "amb" genannt, mit zwei Hauptports und den folgenden Interaktionsregeln einzuführen.
Ein solcher Agent repräsentiert Wahl und kann verwendet werden, um jeden anderen Agenten mit einer beliebigen Anzahl von Hauptports zu simulieren. Zum Beispiel ermöglicht er die Definition einer "parallelen oder" ($ParallelOr$) Operation, die wahr zurückgibt, wenn mindestens eines ihrer Argumente wahr ist – unabhängig davon, welche Berechnung für die anderen Argumente ausgeführt wird.