|
|
|
@ -8,7 +8,7 @@ weight: 5
|
|
|
|
## Chemins
|
|
|
|
## Chemins
|
|
|
|
|
|
|
|
|
|
|
|
Ajouter des étoiles aux constellations suivantes de sorte à obtenir `ok` après
|
|
|
|
Ajouter des étoiles aux constellations suivantes de sorte à obtenir `ok` après
|
|
|
|
exécution.
|
|
|
|
exécution avec l'option `-allow-unfinished-computation`.
|
|
|
|
|
|
|
|
|
|
|
|
1. `-1 ok;`
|
|
|
|
1. `-1 ok;`
|
|
|
|
|
|
|
|
|
|
|
|
@ -16,9 +16,21 @@ exécution.
|
|
|
|
|
|
|
|
|
|
|
|
3. `-1 ok; -2 +3;`
|
|
|
|
3. `-1 ok; -2 +3;`
|
|
|
|
|
|
|
|
|
|
|
|
4. `-1 ok; -2 +3 ok;`
|
|
|
|
4. `-f(+g(X)) ok;`
|
|
|
|
|
|
|
|
|
|
|
|
5. `+f(a) +f(b); +g(a); @+g(b);`
|
|
|
|
5. `+f(a) +f(b); +g(a); @+g(b) ok;`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{< details title="Solution" open=false >}}
|
|
|
|
|
|
|
|
1. `-1 ok; +1;`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2. `-1; +2; +1 -2 ok;`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3. `-1 ok; -2 +3; +1 +2; -3;`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4. `-f(+g(X)) ok; +f(-g(a));`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5. `+f(a) +f(b); +g(a); @+g(b) ok; -f(X) -g(X);`
|
|
|
|
|
|
|
|
{{< /details >}}
|
|
|
|
|
|
|
|
|
|
|
|
## Altération de mémoire
|
|
|
|
## Altération de mémoire
|
|
|
|
|
|
|
|
|
|
|
|
@ -38,32 +50,126 @@ de départ ou modifier celles que vous avez ajoutées.
|
|
|
|
1. Comment relier les étoiles d'initialisation de sorte à initialiser le
|
|
|
|
1. Comment relier les étoiles d'initialisation de sorte à initialiser le
|
|
|
|
registre `a` à `0` ?
|
|
|
|
registre `a` à `0` ?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{< details title="Solution" open=false >}}
|
|
|
|
|
|
|
|
En ajoutant l'étoile `-ia(X) +ra(X);` servant de pont entre le rayon `+ia(0)`
|
|
|
|
|
|
|
|
et le rayon `-ra(X)`. On peut vérifier que l'on a bien un transfert de la
|
|
|
|
|
|
|
|
constante `0` vers `+a(X)` avec l'option `-allow-unfinished-computation` et
|
|
|
|
|
|
|
|
qu'on obtient ainsi `+a(0)` dans la sortie.
|
|
|
|
|
|
|
|
{{< /details >}}
|
|
|
|
|
|
|
|
|
|
|
|
2. Comment afficher la valeur de `a` et ainsi obtenir `a(0)` en sortie ?
|
|
|
|
2. Comment afficher la valeur de `a` et ainsi obtenir `a(0)` en sortie ?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{< details title="Solution" open=false >}}
|
|
|
|
|
|
|
|
Il faut ajouter l'étoile `-a(X) a(X);` pour éviter l'effacement de l'étoile
|
|
|
|
|
|
|
|
correspondant au registre `a`.
|
|
|
|
|
|
|
|
{{< /details >}}
|
|
|
|
|
|
|
|
|
|
|
|
3. Comment mettre à jour `a` à la valeur `1` ?
|
|
|
|
3. Comment mettre à jour `a` à la valeur `1` ?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{< details title="Solution" open=false >}}
|
|
|
|
|
|
|
|
Il y a plusieurs manières de le faire en remplaçant l'étoile `-ia(X) +ra(X)`
|
|
|
|
|
|
|
|
introduite précédemment :
|
|
|
|
|
|
|
|
- court-circuiter avec `+ra(1)`;
|
|
|
|
|
|
|
|
- faire une succession de mise à jour avec l'étoile `-ia(X) +ia1(1); -ia1(X) +ra(X);`.
|
|
|
|
|
|
|
|
{{< /details >}}
|
|
|
|
|
|
|
|
|
|
|
|
4. Comment copier la valeur de `a` dans `b` et afficher `b` ?
|
|
|
|
4. Comment copier la valeur de `a` dans `b` et afficher `b` ?
|
|
|
|
|
|
|
|
|
|
|
|
5. Comment supprimer le registre `b` et le rendre inutilisable ?
|
|
|
|
{{< details title="Solution" open=false >}}
|
|
|
|
|
|
|
|
On utilise la constellation `-a(X) +rb(X); -b(X) b(X);` permettant de rediriger
|
|
|
|
|
|
|
|
la sortie `+a(X)` vers `b` (en plus de l'affichage de `a`). Et on ajoute une
|
|
|
|
|
|
|
|
étoile d'affichage comme pour `a`.
|
|
|
|
|
|
|
|
{{< /details >}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5. En utilisant une seule étoile, comment afficher `mem(a(va) b(vb))` tel que
|
|
|
|
|
|
|
|
`va` est la valeur de `a` et `vb` celle de `b` ?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{< details title="Solution" open=false >}}
|
|
|
|
|
|
|
|
On utilise l'étoile `-a(X) -b(Y) c(va(X) vb(Y));`.
|
|
|
|
|
|
|
|
{{< /details >}}
|
|
|
|
|
|
|
|
|
|
|
|
## Portes logiques
|
|
|
|
## Portes logiques
|
|
|
|
|
|
|
|
|
|
|
|
On veut simuler des portes logiques par des constellations calculant des
|
|
|
|
On veut simuler des formules booléennes par des constellations. Chaque question
|
|
|
|
fonctions sur `{0,1}`.
|
|
|
|
utilise le résultat de la question précédente.
|
|
|
|
|
|
|
|
|
|
|
|
1. Ecrire une constellation calculant la négation de telle sorte à ce qu'elle
|
|
|
|
1. Ecrire une constellation calculant la négation de telle sorte à ce qu'elle
|
|
|
|
produise `1` en sortie lorsqu'ajoutée à l'étoile `@-not(0 X) X;` et `0`
|
|
|
|
produise `1` en sortie lorsqu'ajoutée à l'étoile `@-not(0 X) X;` et `0`
|
|
|
|
lorsqu'ajoutée à `@-not(1 X) X`.
|
|
|
|
lorsqu'ajoutée à `@-not(1 X) X`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{< details title="Solution" open=false >}}
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
+not(0 1); +not(1 0);
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
{{< /details >}}
|
|
|
|
|
|
|
|
|
|
|
|
2. Comment afficher la table de vérité de la négation avec une seule étoile,
|
|
|
|
2. Comment afficher la table de vérité de la négation avec une seule étoile,
|
|
|
|
de sorte à ce qu'on obtienne en sortie `table_not(0 1); table_not(1 0);` ?
|
|
|
|
de sorte à ce qu'on obtienne en sortie `table_not(0 1); table_not(1 0);` ?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{< details title="Solution" open=false >}}
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
@-not(X Y) table_not(X Y);
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
{{< /details >}}
|
|
|
|
|
|
|
|
|
|
|
|
3. Ecrire de deux manières différentes des constellations calculant la
|
|
|
|
3. Ecrire de deux manières différentes des constellations calculant la
|
|
|
|
conjonction et la disjonction et afficher leur table de vérité de la même façon
|
|
|
|
conjonction et la disjonction et afficher leur table de vérité de la même façon
|
|
|
|
que pour la question précédente.
|
|
|
|
que pour la question précédente.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{< details title="Solution" open=false >}}
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
+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);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@-and(X Y R) table_and(X Y R);
|
|
|
|
|
|
|
|
@-or(X Y R) table_or(X Y R);
|
|
|
|
|
|
|
|
@-and2(X Y R) table_and2(X Y R);
|
|
|
|
|
|
|
|
@-or2(X Y R) table_or2(X Y R);
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
{{< /details >}}
|
|
|
|
|
|
|
|
|
|
|
|
4. Utiliser la disjonction et la négation pour afficher la table de vérité
|
|
|
|
4. Utiliser la disjonction et la négation pour afficher la table de vérité
|
|
|
|
de l'implication sachant que `A => B = not(A) \/ B`.
|
|
|
|
de l'implication sachant que `X => Y = not(X) \/ Y`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{< 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);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+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 R) table_impl(X Y R);
|
|
|
|
|
|
|
|
@-impl2(X Y R) table_impl2(X Y R);
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
{{< /details >}}
|
|
|
|
|
|
|
|
|
|
|
|
5. Utiliser l'implication et la conjonction pour afficher la table de vérité
|
|
|
|
5. Utiliser l'implication et la conjonction pour afficher la table de vérité
|
|
|
|
de l'équivalence logique sachant que `A <=> B = (A => B) /\ (B => A)`.
|
|
|
|
de l'équivalence logique sachant que `X <=> Y = (X => Y) /\ (X => Y)`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{< 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);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+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);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@-eqq(X Y R) table_eqq(X Y R);
|
|
|
|
|
|
|
|
@-eqq2(X Y R) table_eqq2(X Y R);
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
{{< /details >}}
|