--- title: "Interaction" weight: 2 --- # Matchable rays Usually, in the theory of term unification, we say that two terms (which are basically rays without polarities) are *unifiable* where there a substitution of variables making them equal. For instance `f(X)` and `f(h(Y))` are unifiable with the substitution `{X:=h(Y)}` replacing `X` by `h(Y)`. We are usually interested in the most general substitution. We could have `{X:=h(c(a)); Y:={c(a)}` but it would be less general. In the same fashion, we say that two rays are *matchable* when their underlying terms (obtained by dropping polarities) are unifiable but we also want opposite polarities to face each other instead of looking for equal symbols: we want symbols prefixed with `+` to match same symbols but prefixed with `-`: - `+f(X)` and `-f(h(a))` are matchable with `{X:=h(a)}`; - `f(X)` and `f(h(a))` are not matchable; - `+f(X)` and `+f(h(a))` are not matchable; - `+f(+h(X))` and `-f(-h(a))` are matchable with `{X:=a}`; - `+f(+h(X))` and `-f(-h(+a))` are matchable with `{X:=+a}`; # Fusion Stars are able to interact, through an operation called *fusion*, by using the principle of Robinson's resolution rule. We define an operator `` with connects the `i`th ray of a star to the `j`th ray of another star. Fusion is defined as follows for matchable rays `r` and `r'`: ``` r r1 ... rk <0,0> r' r1' ... rk' == theta(r1) ... theta(rk) theta(r1') ... theta(rk') ``` where `theta` is the most general substitution induced by `r` and `r'`. Notice that: - `r` and `r'` interact and are annihilated; - the two stars are merged; - the substitution resolving the conflict between `r` and `r'` is propagated to adjacent rays. For example: ``` X +f(X) <1,0> -f(a) == a ``` {{< hint info >}} This corresponds to the cut rule for first-order logic except that we are in a logic-agnostic setting (our symbols do not hold any meaning). {{< /hint >}} # Execution You have to put a focus on some stars to start a computation as in: ``` X1, f(X1); +a(X2 Y2); @-h(f(X3 Y3)) +a(+f(X4) h(-f(X4))); ``` An *interaction configuration* is an expression `R |- I'` where: - `R` is a static constellation called *reference constellation*. It corresponds to unmarked stars; - `I` is a dynamic constellation called *interaction space*. It corresponds to all stars marked by a focus symbol `@`. It can be seen as a "working space". The LSC execute constellations by looking for copies of partners in `R` for each rays of `I`, as follows: 1. select a ray `ri` in a star `s` of `I`; 2. look for possible connections with rays `rj` belonging to stars in `R`; 3. duplicate `s` so that there is exactly one copy of `s` in `I` for every `rj`; 4. replace every copy by its fusion `s s'`, where `s'` is the star to which `rj` belongs; 5. repeat until there is no possible interaction in `I`. The result of execution consists of all *neutral* stars that remain in `I`, i.e. those without any polarized rays. Indeed, polarized stars are ignored/removed because they correspond to *unfinished* (or stuck) computations. # Example We want to execute the following constellation: ``` +7(l:X) +7(r:X); 3(X) +8(l:X); @+8(r:X) 6(X); -7(X) -8(X); ``` We distinguish an interaction space on which we focus interaction and a reference constellation where we copy possible partners. We prefix `>>` for selected rays. We have: ``` +7(l:X) +7(r:X); 3(X) +8(l:X); -7(X) >>-8(X) |- >>+8(r:X) 6(X); ``` ``` +7(l:X) +7(r:X); 3(X) +8(l:X); -7(X) -8(X) |- -7(r:X) 6(X); ``` ``` +7(l:X) >>+7(r:X); 3(X) +8(l:X); -7(X) -8(X) |- >>-7(r:X) 6(X); ``` ``` +7(l:X) +7(r:X); 3(X) +8(l:X); -7(X) -8(X) |- +7(l:X) 6(X); ``` ``` +7(l:X) +7(r:X); 3(X) +8(l:X); >>-7(X) -8(X) |- >>+7(l:X) 6(X); ``` ``` +7(l:X) +7(r:X); 3(X) +8(l:X); -7(X) -8(X) |- -8(l:X) 6(X); ``` ``` +7(l:X) +7(r:X); 3(X) >>+8(l:X); -7(X) -8(X) |- >>-8(l:X) 6(X); ``` ``` +7(l:X) +7(r:X); 3(X) +8(l:X); -7(X) -8(X) |- 3(X) 6(X); ``` The result of the computation is `3(X) 6(X);`.