• Aucun résultat trouvé

R´ eseaux de Kahn et s´ emantique de Lustre

entre le paradigme fonctionnel, et r´eactif synchrone : Lucid synchrone, voir `a ce propos [12].

10.4 R´ eseaux de Kahn et s´ emantique de Lustre

A l’origine de Lustre, on trouve une machine th´` eorique form´ee d’un graphe dont les noeuds traitent des informations envoy´ees d’autres noeuds `a travers des files non-born´ees, et qui renvoient sur les arcs sortant des messages `a d’autres noeuds.

Cette machine th´eorique abstrait en quelque sorte l’´echantillonnage et le traitement discret des donn´ees (automatique, traitement du signal, etc.). Il va falloir n´eanmoins imposer une restriction sur le traitement fait par les noeuds pour que cela ait un sens.

Le domaine s´emantique que nous allons utiliser est le suivant. Le domaine des donn´ees S est celui des suites de valeurs (dans Val) finies (x0, . . . , xn) ou

Dit de fa¸con plus simple,xest un pr´efixe dey; et l’ordre pr´efixe est la restriction

`

a S de l’ordre d´efini au chapitre 6 pour N→Val (Val´etant un CPO).S est donc un CPO (v´erification triviale).

Il faut maintenant d´efinir les fonctions aux noeuds du graphe, d’un r´eseau de Kahn. On veut qu’elles soient calculables, on impose donc naturellement la continuit´e (cf. chapitre 6). En fait, on peut se contenter ici d’imposer pour f :Sn → Smla commutation aux sup; celle-ci peut s’imposer coordonn´ee par coordonn´ee (on suppose icim=n= 1) : pour touteω-chaˆınex0≤x1≤. . .≤

(comme f(xj) n’est pas n´ecessairement croissante, il faut supposer qu’il existe unsupde cette suite, ´egale au terme de gauche, dans cette d´efinition).

Cette condition, historique, est en fait ´equivalente `a la«continuit´e» dans notre cas. En effet, pour toute ω-chaˆıne x0 ≤x1 ≤. . .≤xn ≤. . . on a, pour

156 CHAPITRE 10. PROGRAMMATION R ´EACTIVE SYNCHRONE

Intuitivement pourjfix´e, laji`eme valeur du flot de sortie defest d´etermin´ee par l’image parf sur un pr´efixe fini du flot d’entr´ee. La continuit´e est ici une sorte d’axiome de«causes finies».

Pour mieux comprendre l’importance de la condition de continuit´e, donnons ici un exemple de fonction non continue surS. Soitg:S → S telle que :

A l’origine, Kahn demandait juste la pr´` eservation des bornes sup´erieures.

Quid de la croissance (qui est une forme de causalit´e) ? Supposons que l’on ait une fonctionf :S → S telle que pour touteω-chaˆınex0≤x1≤. . .≤xj ≤. . .,

La s´emantique de Lustre peut ˆetre enti`erement donn´ee sur le CPO introduit plus haut. En fait Lustre n’est qu’une notation pour g´en´erer un r´eseau de Kahn, dont les noeuds sont les ´equations Lustre.

Exercices

1. (Marc Pouzet) L’objectif de cet exercice est de programmer le contrˆoleur d’une machine `a caf´e. Il dispose des entr´ees suivantes :

– caf´e, grand caf´e, th´e : permettent de s´electionner une boisson ;

– annuler : ce bouton permet d’annuler la commande et de vider le mon-nayeur si des pi`eces de monnaie ont ´et´e donn´ees. Cette machine `a caf´e permet de commander plusieurs boissons et ne rend la monnaie que lorsque le bouton annuler est entr´e ;

– pi`ece : permet d’introduire des pi`eces de monnaie. On supposera ici que les seules pi`eces possibles sont des pi`eces de 10 centimes et 20 centimes ; – prˆet : indique au contrˆoleur que la boisson demand´ee est prˆete ;

10.4. R ´ESEAUX DE KAHN ET S ´EMANTIQUE DE LUSTRE 157 – miliseconde : est un signal vrai toutes les milisecondes.

Les sorties de cette machine sont d´efinies ci-dessous :

– preparer : indique que la boisson demand´ee doit ˆetre pr´epar´ee (cette information contrˆole le m´ecanisme de fabrication) ;

– sonnerie : lorsque la boisson est prˆete, un signal sonore est ´emis ; – boisson : indique que la boisson est en train d’ˆetre pr´epar´ee ; – monnaie : elle affiche la monnaie introduite dans la machine ; – vider monnaie : permet de vider le monnayeur.

Le prix des consommations est le suivant : – un caf´e coute 40 centimes ;

– un grand caf´e coute 1 euro ; – un th´e coute 50 centimes.

Le fonctionnement de cette machine est le suivant : le consommateur in-troduit des pi`eces dans la machine puis s´electionne sa boisson. Le voyant boisson est alors allum´e. Celui-ci s’´eteint et le signal sonore sonnerie est

´emis pendant 5 secondes. Si le consommateur appuie sur le bouton an-nuler avant d’avoir s´electionn´e sa boisson, sa monnaie lui est rendue. Si les bouton caf´e, grand caf´e ou th´e sont enfonc´es avant que l’utilisateur ait introduit sa monnaie, le signal sonnerie est ´emis pendant 1 seconde.

Plusieurs boissons peuvent ˆetre command´ees `a la suite lorsqu’il y a suffi-samment de monnaie.

Programmer ce contrˆoleur en Lustre.

158 CHAPITRE 10. PROGRAMMATION R ´EACTIVE SYNCHRONE

Bibliographie

[1] S. Abramsky and A. Jung. Domain theory. In S. Abramsky, D. M.

Gabbay, and T. S. E. Maibaum, editors, Handbook of Logic in Compu-ter Science, aussi disponible `ahttp: // www. cs. bham. ac. uk/ ~axj/ pub/

papers/ handy. ps. gz, volume 3, pages 1–168. Clarendon Press, 1994.

[2] H.P. Barendregt.The Lambda Calculus : Its Syntax and Semantics. Studies in Logic and the Foundations of Mathematics. Elsevier Science, 1985.

[3] Olivier Bournez. Fondement de l’informatique : logique, mod`eles, calculs, 2012.

[4] E. Chailloux, P. Manoury, and B. Pagano. D´eveloppement d’ap-plications avec Objective Caml. Avec CD-Rom. O’Reilly Editions, aussi disponible `a http://www.pps.univ-paris-diderot.fr/Livres/

ora/DA-OCAML/index.html, 2000.

[5] Fran¸cois Morain. Introduction `a la programmation et `a l’algorithmique, 2012.

[6] Thomas H. Cormen. Algorithmique :cours avec 957 exercices et 158 pro-bl`emes. Dunod, 2010.

[7] Claude Delannoy. Programmer en Java. Eyrolles, 2012.

[8] Eric Goubault et Sylvie Putot. V´erification pour les syst`emes embarqu´es, 2012.

[9] L´eo Liberti. Les bases de la programmation et de l’algorithmique, 2012.

[10] L´eo Liberti. Programmation en C++, 2012.

[11] R´emy Malgouyres, Rita Zrour, and Fabien Feschet Malgouyres. Initiation

`

a l’algorithmique et `a la programmation en C : cours avec 129 exercices corrig´es. Dunod, 2012.

[12] Marc Pouzet. Lucid Synchrone, version 3. Tutorial and reference ma-nual. Universit´e Paris-Sud, LRI, April 2006. Distribution available at : www.lri.fr/∼pouzet/lucid-synchrone.

[13] Benjamin Werner and Fran¸cois Pottier. Algorithmique et programmation, 2013.

[14] Glynn Winskel. The formal semantics of programming languages : an in-troduction. MIT Press, Cambridge, MA, USA, 1993.

159