143 lines
4.6 KiB
Markdown
143 lines
4.6 KiB
Markdown
---
|
|
title: "Exécution"
|
|
weight: 30
|
|
---
|
|
|
|
# Rayons compatibles
|
|
|
|
Dans la théorie de l'unification, on dit que deux termes
|
|
(qu'on peut voir comme des rayons sans polarités) sont *unifiables* lorsqu'il
|
|
existe une substitution des variables de telle sorte à les rendre égaux.
|
|
Par exemple, `f(X)` et `f(h(Y))` sont unifiables avec la substitution
|
|
`{X:=h(Y)}` remplaçant `X` par `h(Y)`.
|
|
|
|
Les substitutions d'intérêt sont les plus générales. Nous aurions pu considérer
|
|
la substitution `{X:=h(c(a)); Y:={c(a)}`, tout aussi valide mais inutilement
|
|
précise.
|
|
|
|
Dans la même idée, ici, nous disons que deux rayons sont *compatibles* lorsque
|
|
leur terme sous-jacent (obtenu par oubli des polarités) sont unifiables mais
|
|
nous voulons aussi que des symboles de fonctions de polarités opposées se
|
|
rencontrent (au lieu de considérer des symboles identiques):
|
|
|
|
- `+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
|
|
|
|
Les étoiles interagissent au travers d'une opération appelée *fusion*, en
|
|
utilisant le principe de la règle de résolution de Robinson. On définit un
|
|
opérateur `<i,j>` connectant le `i`ème rayon d'une étoile au `j`ème rayon d'une
|
|
autre étoile.
|
|
|
|
La fusion est définie ainsi pour deux rayons compatibles `r` et `r'`:
|
|
```
|
|
r r1 ... rk <0,0> r' r1' ... rk' == theta(r1) ... theta(rk) theta(r1') ... theta(rk')
|
|
```
|
|
|
|
où `theta` est la substitution la plus générale induite par `r` et `r'`.
|
|
|
|
Remarquez que:
|
|
- `r` et `r'` sont annihilées pendant l'interaction;
|
|
- leurs deux étoiles fusionnent;
|
|
- la substitution obtenue par résolution du conflit entre `r` et `r'` est
|
|
propagée aux rayons adjacents.
|
|
|
|
Exemple :
|
|
```
|
|
X +f(X) <1,0> -f(a) == a
|
|
```
|
|
|
|
{{< hint info >}}
|
|
Cette opération de fusion correspond à la règle de compure pour la logique
|
|
du premier ordre. Cependant, la différence ici est que nous sommes dans un
|
|
cadre "alogique" (nos symboles ne portent aucun sens logique).
|
|
{{< /hint >}}
|
|
|
|
# Exécution
|
|
|
|
Il faut poser un focus sur les étoiles initiales sur lesquelles nous voulons
|
|
démarrer le calcul :
|
|
```
|
|
X1, f(X1);
|
|
+a(X2 Y2);
|
|
@-h(f(X3 Y3)) +a(+f(X4) h(-f(X4)));
|
|
```
|
|
|
|
{{< hint info >}}
|
|
Le focus est optionnel. Lorsqu'il est omis, une étoile est sélectionnée pour
|
|
nous.
|
|
{{< /hint >}}
|
|
|
|
Passons à la théorie de l'exécution !
|
|
|
|
Une *configuration interactive* est une expression `R |- I` où:
|
|
- `R` est une constellation statique nommée *constellation de référence*. Elle
|
|
est constituée des étoiles non marquées par `@` et elle nous servira de stock
|
|
infini d'étoiles à tirer comme on pioche dans des bacs à LEGO pour faire des
|
|
constructions;
|
|
- `I` est une constellation dynamique nommée *espace d'interaction*. Elle
|
|
est constituée de l'ensemble des étoiles marquées avec `@` et se comporte comme
|
|
un espace de travail où des constructions sont réalisées par fusion d'étoiles.
|
|
|
|
Le LSC exécute les constellations en prenant pour partenaire des copies
|
|
d'étoiles dans `R` pour les projeter et fusionner sur chaque rayon de `I` comme
|
|
suit :
|
|
1. selectionner un rayon `ri` d'une étoile `s` de `I`;
|
|
2. chercher toutes les connexions possibles avec des rayons `rj` d'étoiles `s'`
|
|
de `R`;
|
|
3. dupliquer `s` dans `I` pour chaque `rj` trouvé;
|
|
4. remplacer chaque copie de `s` par la fusion `s <i,j> s'`;
|
|
5. répeter jusqu'à qu'il n'y a plus aucune interaction possible dans `I`.
|
|
|
|
Le résultat de l'exécution contient toutes les étoiles non polarisées qui
|
|
restent dans `I`. Ces étoiles non polarisées que nous ignorons correspondent
|
|
en fait à des calculs bloqués ou non terminés.
|
|
|
|
# Exemple
|
|
|
|
Considérons l'exécution de la constellation suivante :
|
|
```
|
|
+7(l:X) +7(r:X); 3(X) +8(l:X); @+8(r:X) 6(X);
|
|
-7(X) -8(X);
|
|
```
|
|
|
|
On sépare la constellation en constellation de référence et en espace
|
|
d'interaction. On préfixe par `>>` les rayons sélectionnés. Nous avons donc
|
|
les étapes suivantes :
|
|
```
|
|
+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);
|
|
```
|
|
|
|
Le résultat du calcul est une constellation contenant l'étoile `3(X) 6(X);`. |