diff --git a/content/docs/introduction/_index.md b/content/docs/introduction/_index.md index 7864f76..115cd9f 100644 --- a/content/docs/introduction/_index.md +++ b/content/docs/introduction/_index.md @@ -1,5 +1,5 @@ --- title: "Introduction" bookFlatSection: true -weight: 1 +weight: 10 --- diff --git a/content/docs/introduction/about.md b/content/docs/introduction/about.md deleted file mode 100644 index 9591e89..0000000 --- a/content/docs/introduction/about.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "A propos" -weight: 1 ---- - -# A propos - -## Syntaxe transcendantale - -(soon) - -## Résolution stellaire - -(soon) - -## Large star collider - -(soon) \ No newline at end of file diff --git a/content/docs/introduction/large-star-collider.md b/content/docs/introduction/large-star-collider.md new file mode 100644 index 0000000..260c673 --- /dev/null +++ b/content/docs/introduction/large-star-collider.md @@ -0,0 +1,6 @@ +--- +title: "Large star collider" +weight: 30 +--- + +(soon) \ No newline at end of file diff --git a/content/docs/introduction/stellar-resolution.md b/content/docs/introduction/stellar-resolution.md new file mode 100644 index 0000000..9cd317c --- /dev/null +++ b/content/docs/introduction/stellar-resolution.md @@ -0,0 +1,6 @@ +--- +title: "Résolution stellaire" +weight: 20 +--- + +(soon) \ No newline at end of file diff --git a/content/docs/introduction/transcendental-syntax.md b/content/docs/introduction/transcendental-syntax.md new file mode 100644 index 0000000..76bd178 --- /dev/null +++ b/content/docs/introduction/transcendental-syntax.md @@ -0,0 +1,6 @@ +--- +title: "Syntaxe transcendantale" +weight: 10 +--- + +(soon) \ No newline at end of file diff --git a/content/docs/playing/_index.md b/content/docs/playing/_index.md index b1b267c..d678f30 100644 --- a/content/docs/playing/_index.md +++ b/content/docs/playing/_index.md @@ -1,5 +1,5 @@ --- title: "Jouer avec les étoiles" bookFlatSection: true -weight: 1 +weight: 20 --- diff --git a/content/docs/playing/configure.md b/content/docs/playing/configure.md index dbcbb23..a4df5b6 100644 --- a/content/docs/playing/configure.md +++ b/content/docs/playing/configure.md @@ -1,6 +1,6 @@ --- title: "Configurer l'interaction" -weight: 3 +weight: 40 --- # Auto-interaction diff --git a/content/docs/playing/elementary.md b/content/docs/playing/elementary.md index 6114dfa..0a57605 100644 --- a/content/docs/playing/elementary.md +++ b/content/docs/playing/elementary.md @@ -1,6 +1,6 @@ --- title: "Interactions élémentaires" -weight: 4 +weight: 50 --- # Interactions élémentaires diff --git a/content/docs/playing/interaction.md b/content/docs/playing/execution.md similarity index 99% rename from content/docs/playing/interaction.md rename to content/docs/playing/execution.md index 5744905..78db0e3 100644 --- a/content/docs/playing/interaction.md +++ b/content/docs/playing/execution.md @@ -1,6 +1,6 @@ --- -title: "Interaction" -weight: 2 +title: "Exécution" +weight: 30 --- # Rayons compatibles diff --git a/content/docs/playing/exercices.md b/content/docs/playing/exercices.md index 9ab216e..751e31f 100644 --- a/content/docs/playing/exercices.md +++ b/content/docs/playing/exercices.md @@ -1,6 +1,6 @@ --- title: "Exercices" -weight: 5 +weight: 60 --- # Exercices @@ -88,7 +88,7 @@ la sortie `+a(X)` vers `b` (en plus de l'affichage de `a`). Et on ajoute une On utilise l'étoile `-a(X) -b(Y) c(va(X) vb(Y));`. {{< /details >}} -## Circuits booléens +## Logique booléenne On veut simuler des formules booléennes (plus précisément des circuits) par des constellations. Chaque question utilise le résultat de la question précédente. @@ -174,11 +174,8 @@ de l'équivalence logique sachant que `X <=> Y = (X => Y) /\ (X => Y)`. ``` {{< /details >}} -5. En utilisant l'étoile `+share(X X X);`, définir le circuit booléen pour -la formule du tiers exclu qui prend une unique entrée, la partage au travers de -deux sorties avec l'une qui passe par une porte NOT et pour rejoindre l'autre -sortie à travers une porte OR. Afficher la table de vérité correspondant à ce -circuit. +6. Définir une constellation représentant la formule du tiers `X \/ ~X`. +Afficher la table de vérité correspondant à cette formule. {{< details title="Solution" open=false >}} ``` @@ -186,20 +183,23 @@ circuit. +and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1); +or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1); -+and2(0 X 0); +and2(1 X X); -+or2(0 X X); +or2(1 X 1); - --not(X Y) -or(Y Z R) +impl(X Z R); --not(X Y) -or2(Y Z R) +impl2(X Z R); - --impl(X Y R1) -impl(Y X R2) -and(R1 R2 R) +eqq(X Y R); --impl2(X Y R1) -impl2(Y X R2) -and2(R1 R2 R) +eqq2(X Y R); - -+share(X X X); - 'excluded middle --share(X X1 X2) -not(X1 R1) -or(R1 X2 R2) +ex(R2); +-not(X R1) -or(R1 X R2) +ex(X R2); -@-ex(X) table_ex(X); +@-ex(X R) table_ex(X R); +``` +{{< /details >}} + +7. Déterminer pour quelles valeurs de `X`, `Y` et `Z` la formule `X /\ ~(Y \/ Z)` +est vraie. + +{{< details title="Solution" open=false >}} +``` ++not(0 1); +not(1 0); ++and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1); ++or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1); + +' X /\ ~(Y \/ Z) +@-or(Y Z R1) -not(R1 R2) -and(X R2 1) x(X) y(Y) z(Z); ``` {{< /details >}} \ No newline at end of file diff --git a/content/docs/introduction/install.md b/content/docs/playing/install.md similarity index 91% rename from content/docs/introduction/install.md rename to content/docs/playing/install.md index 7aa90ef..5774ced 100644 --- a/content/docs/introduction/install.md +++ b/content/docs/playing/install.md @@ -1,6 +1,6 @@ --- title: Installer le LSC -weight: 2 +weight: 10 --- # Installer le LSC diff --git a/content/docs/playing/syntax.md b/content/docs/playing/syntax.md index 43bf247..5b642d2 100644 --- a/content/docs/playing/syntax.md +++ b/content/docs/playing/syntax.md @@ -1,6 +1,6 @@ --- title: "Syntaxe" -weight: 1 +weight: 20 --- # Rayons diff --git a/content/docs/techniques/_index.md b/content/docs/techniques/_index.md index fee8ecc..65e5805 100644 --- a/content/docs/techniques/_index.md +++ b/content/docs/techniques/_index.md @@ -1,5 +1,5 @@ --- title: "Techniques" bookFlatSection: true -weight: 1 +weight: 30 --- diff --git a/content/docs/techniques/composition.md b/content/docs/techniques/composition.md deleted file mode 100644 index 51a593d..0000000 --- a/content/docs/techniques/composition.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Composition" -weight: 5 ---- - -(soon) \ No newline at end of file diff --git a/content/docs/techniques/conditionals.md b/content/docs/techniques/conditionals.md index 25147c1..9f4c137 100644 --- a/content/docs/techniques/conditionals.md +++ b/content/docs/techniques/conditionals.md @@ -3,4 +3,53 @@ title: "Conditions" weight: 2 --- -(soon) \ No newline at end of file +# Conditions booléennes + +Selon les compatibilités entre les rayons, des choix sont faits. Par exemple, +en vérifiant une valeur de vérité : + +``` +-true result(the condition is true); +-false result(the condition is false); +@+true; +``` + +On une étoile par clause de condition et l'entréé dans une condition (ou le +choix d'une étoile) dépend de la compatibilité entre les rayons. C'est en fait +le mécanisme de base de la résolution stellaire. + +# Conditions complexes + +Ce principe peut se généraliser à n'importe quel rayon. La constellation +suivante : + +``` ++not(0 1); +not(1 0); ++and(0 X 0); +and(1 X X); ++or(0 X X); +or(1 X 1); +-not(X Y) -or(Y Z R) +impl(X Z R); + +-cond(X Y) -impl(X Y 1) ok; + +@+cond(0 1); +``` + +peut-être lue comme "si X implique Y alors afficher ok". + +# Cas d'échec + +Remarquez qu'il n'est pas (nativement) possible de représenter le `else` de la +programmation. Il est donc nécessaire de capturer tous les cas manuellement +lorsque l'on souhaite être exhaustif : + +``` ++not(0 1); +not(1 0); ++and(0 X 0); +and(1 X X); ++or(0 X X); +or(1 X 1); +-not(X Y) -or(Y Z R) +impl(X Z R); + +-cond(X Y) -impl(X Y 1) ok; +-cond(X Y) -impl(X Y 0) not_ok; + +@+cond(0 1); +``` \ No newline at end of file diff --git a/content/docs/techniques/data-retrieval.md b/content/docs/techniques/data-retrieval.md index 1b617e2..b44e0b8 100644 --- a/content/docs/techniques/data-retrieval.md +++ b/content/docs/techniques/data-retrieval.md @@ -3,4 +3,87 @@ title: "Récupération de données" weight: 1 --- -(soon) \ No newline at end of file +# Récupération de données + +Dans cette section sont décrites des techniques exploitant les mécanismes de la +résolution stellaire afin de réaliser des opérations souhaitables pour un +programmeur. + +## Retour d'interaction + +Les rayons non polarisés ou *neutres* ne peuvent pas interagir mais se +retrouvent en résultat de l'exécution. Il sont donc utilisés pour récupérer des +informations sur le calcul effectué. + +On peut les utiliser pour suivre les interactions effectives avec des sortes de +messages de debug. Par exemple, si on a cette constellation calculant pour +quelles valeurs la formule `X /\ ~(Y \/ Z)` est vraie : + +``` ++not(0 1); +not(1 0); ++and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1); ++or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1); + +' X /\ ~(Y \/ Z) +@-or(Y Z R1) -not(R1 R2) -and(X R2 1) x(X) y(Y) z(Z); +``` + +On pourrait ajouter un rayon neutre pour vérifier quel calcul a été effectué +pour le connecteur `not` : + +``` ++not(0 1) debug(not(0 1)); +not(1 0) debug(not(1 0)); ++and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1); ++or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1); + +' X /\ ~(Y \/ Z) +@-or(Y Z R1) -not(R1 R2) -and(X R2 1) x(X) y(Y) z(Z); +``` + +## Redirection + +Il est aussi possible d'utiliser des rayons polarisés afin de déléguer +le transfert de message à une autre constellation dédiée : + +``` ++not(0 1) +debug(0 1); +not(1 0) +debug(1 0); ++and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1); ++or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1); + +' debug +-debug(X R) debug(not(X R)); + +' X /\ ~(Y \/ Z) +@-or(Y Z R1) -not(R1 R2) -and(X R2 1) x(X) y(Y) z(Z); +``` + +Cela permet en particulier un traitement générique. + +## Langage naturel + +En utilisant des constantes, il est possible de mimer le langage naturel, chose +très pratique pour l'affichage de résultats : + +``` +message(hello world); +``` + +Cette astuce utilise le fait que les constantes sont ordonnées lorsqu'elles +sont en arguments d'un symbole de fonction. + +## Interpolation de chaîne + +En rajoutant des variables, il est en fait possible d'afficher des messages +génériques : + +``` ++not(0 1) +debug(0 1); +not(1 0) +debug(1 0); ++and(0 0 0); +and(0 1 0); +and(1 0 0); +and(1 1 1); ++or(0 0 0); +or(0 1 1); +or(1 0 1); +or(1 1 1); + +' debug +-debug(X R) debug(the result of not(X) is R); + +' X /\ ~(Y \/ Z) +@-or(Y Z R1) -not(R1 R2) -and(X R2 1) x(X) y(Y) z(Z); +``` \ No newline at end of file diff --git a/content/docs/techniques/digging.md b/content/docs/techniques/digging.md index 6240f3c..d7c862d 100644 --- a/content/docs/techniques/digging.md +++ b/content/docs/techniques/digging.md @@ -3,4 +3,26 @@ title: "Digging" weight: 4 --- -(soon) \ No newline at end of file +# Digging + +Les polarités internes permettent des mécanismes intéressants comme le fait +de faire apparaître des rayons polarisés lors de l'interaction. + +Utiliser l'option `-allow-unfinished-computation` sur la constellation suivante +: + +``` ++f(+g(a)); +@-f(X) X; +``` + +On remarque l'apparition d'un rayon `+g(a)` qui pourrait être utilisé pour +interagir avec un autre rayon : + +``` ++f(+g(a)); +-g(X) result(X); +@-f(X) X; +``` + +Nous avons en quelque sorte déterré `+g(a)`. \ No newline at end of file diff --git a/content/docs/techniques/loops.md b/content/docs/techniques/loops.md index 1983640..410b16b 100644 --- a/content/docs/techniques/loops.md +++ b/content/docs/techniques/loops.md @@ -1,6 +1,87 @@ --- -title: "Boucles convergeantes" +title: "Boucles" weight: 3 --- -(soon) \ No newline at end of file +Il est possible de construire des boucles dans le cas où des étoiles +peuvent être réutilisées. + +# Boucles divergentes improductive + +Il est recommandé d'utiliser l'option `-show-steps` pour cette partie. + +``` +-f(X) +f(X); +@+f(X); +``` + +Dans l'exemple ci-dessus, on se concentre sur `@+f(X);` pour se connecter +à `-f(X)` et ainsi produire `+f(X)` sur lequel on se focalise puis on +recommence en utilisant la première étoile, et ce indéfiniement. + +La boucle existe car il existe une compatibilité dans la première étoile +entre son premier rayon `-f(X)` et son second rayon `+f(X)` permettant sa +duplication et sa réutilisation. + +# Boucles divergentes productives + +En remplaçant le second rayon de `-f(X) +f(X);` de sorte à le rendre strictement +plus grand (en nombre de symboles) que le premier, il est possible de rendre +la boucle productive : elle ajoute de plus en plus de symboles. Par exemple : + +``` +-f(X) +f(s(X)); +@+f(X); +``` + +Remarque : si on avait fait l'inverse avec + +``` +-f(s(X)) +f(X); +@+f(X); +``` + +on serait resté avec une boucle improductive qui dit simplement que ce nous +donnons (le `X` de `@+f(X)` ici) doit être identifié à `s(X)` mais au final +on produit du `X` sans utiliser le symbole `s` qui disparaît. + +# Boucles convergeantes + +Afin d'avoir une boucle convergente, il faut proposer des ressources sur +lesquelles on se focalise et avoir une boucle qui les consomme. + +## Décroissance + +On peut par exemple proposer une pile de symboles `s` dépilée par une étoile +de boucle : + +``` +-f(0) end; +-f(s(X)) +f(X); +@+f(s(s(s(0)))); +``` + +Remarque : on a ajouté une étoile `-f(0) end` pour repérer le moment où la +boucle laisse `0` (on a retiré tous les `s`) pour ensuite produire `end` en +sortie. + +## Boucle for + +En utilisant ces mécanismes, on peut simuler la boucle `for` de la programmation +impérative en ajoutant des rayons à l'étoile de boucle. + +Voici une constellation qui affiche trois fois `hello` avec la valeur de +compteur associée : + +``` +-f(0) end; +-f(s(X)) +f(X) message(hello X); +@+f(s(s(s(0)))); +``` + +# Cas général + +Dans cette section, nous avons seulement considéré des étoiles de boucles +binaires mais il est tout à fait possible d'imaginer des choses plus compliquées +avec plusieurs étoiles qui forment plusieurs embranchements pour ensuite +réutiliser une étoile déjà utilisée. \ No newline at end of file diff --git a/content/docs/techniques/permission-check.md b/content/docs/techniques/permission-check.md index 29be859..f0c3034 100644 --- a/content/docs/techniques/permission-check.md +++ b/content/docs/techniques/permission-check.md @@ -3,4 +3,10 @@ title: "Permissions" weight: 6 --- +# Permissions + +## Composition + +## Composition conditionnée + (soon) \ No newline at end of file