Définir des constellations
Définitions statiques
On peut nommer des constellations que l'on écrit directement. Les identifiants suivent les mêmes règles que pour les symboles de fonction des rayons.
w = a.
x = +a; -a b.
z = { -f(X) }.
Lorsque l'on se réfère à un identifiant de constellation, on utilise le
préfixe #
:
y = #x.
Comme pour l'application en programmation fonctionnelle, l'union de constellations est notée avec un espacement :
union1 = #x #y #z.
On peut aussi ajouter des parenthèses autour des expressions pour plus de lisibilité ou pour éviter des ambiguïtés syntaxiques :
union1 = (#x #y) #z.
Mais il faut noter que contrairement à la programmation fonctionnelle, il n'y a pas d'ordre défini.
Les définitions statiques correspondent à la notion "d'objet-preuve" dans la correspondance de Curry-Howard.
Focus
On peut mettre le focus sur toutes les étoiles d'une constellation en
la préfixant aussi avec @
et en l'entourant de parenthèses :
x = +a; -a b.
z = -f(X).
union1 = @#x #z.
Contraintes d'inégalité
Il est possible d'ajouter une séquence de contraintes d'inégalités entre des termes :
ineq = +f(a); +f(b); @-f(X) -f(Y) r(X Y) | X!=Y.
Cela rend invalide toute interaction où X
et Y
sont totalement définies
(absence de variables) et instanciées avec la même valeur.
Ces inégalités peuvent être séparées par des espaces ou des virgules :
X!=Y X!=Z
ou
X!=Y, X!=Z
Pre-execution
L'exécution d'une constellation dans un bloc exec ... end
définit aussi
une constellation :
exec +f(X); -f(a) end