Un programme Lustre définie un traitement sur des flots de données, c’est `a dire qu’il définie quelles sont les valeurs de sorties en fonction des valeurs entrées `a tout instant. Il est parfaitement adapté pour programmer des taches temps réel et il est basé sur la notion de synchronisme fort.
2. Plan de projet
1 Lustre – Les principes de base
2 Structure d’un programme
3 Les Operateurs de Lustre
4 Vérification formelle en lustre
2
3. Plan de projet
5 Exemple Concert
6 LUSTRE et l’industrie
7 Avantages et limites
8
Conclusion
3
9
Articles
4. But Origine Coopération
simplifier et automatiser
l’implémentation de lois de
commandes
Notation graphique permettant la
représentation de circuits logiques en
automatique.
informaticiens et automaticiens ont mis
la main a la pate pour formaliser le
tout...
1
Lustre est un langage de spécification particulièrement adapté pour la conception des systèmes
de contrôle-commande temps réel.
Début de sa conception en 1984 dans le Laboratoire de recherche VERIMAG `a Grenoble...
1. Lustre – Les principes de base
Historique
5. 1.Lustre – Les principes de base
2
Définition
Un programme Lustre définie un traitement sur des flots de données, c’est `a dire qu’il définie quelles
sont les valeurs de sorties en fonction des valeurs entrées `a tout instant. Il est parfaitement adapté
pour programmer des taches temps réel et il est basé sur la notion de synchronisme fort.
Lustre est un langage `a syntaxe et sémantique formelle.
• Syntaxe rigoureuse les constructions du langages ne possèdent qu’une interprétation possible
• Sémantique `a base mathématique: sémantique fonctionnelle `a base de flots de données
6. 1.Lustre – Les principes de base
3
Le synchronisme fort
• les temps d’exécution et de communication sont nuls et les actions d’un système de processus sont
instantanées.
• les sorties sont synchrones avec les entrées et se déroulent aux instants où elles ont ´été sollicitées
Déterministe
Un programme Lustre est déterministe, en ce sens que les flots de sorties sont totalement
déterminée par les flots d’entrées.
Approche déclarative ou algébrique
consiste en un ensemble de déclarations définissant les relations entre flots d’entrées et flots de
sorties, en d’autres termes des équations mathématiques.,
7. 1. Lustre – Les principes de base
Approche algébrique, ou déclarative
Exemple
Soit X = (x1, x2, . . .),Y = (y1, y2, . . .) deux flots de réels d’entrées
et Z = (z1, z2, . . .) un flots de réel de sorties, alors la déclaration :
Z = X + Y signifie pour tout instant n appartient à N* zn = xn + yn.
Remarque: Alors qu’en langage C le symbole = représente l’affectation, ici il représente l’´égalité mathématique,
´écrire X = X + 1 sera donc rejeté par le compilateur Lustre.
4
8. 1.Lustre – Les principes de base
Model-checking
• se base une description du système sous forme d’automate
• vérification d’une propriété par parcours exhaustif des états du système
4
LESAR est l’ outil de preuve associe `a Lustre : preuve par Model Checking.
9. 1. Lustre – Les principes de base
Approche flot de données
Programme
Lustre
Fig: Traitement de flots de données, par exemple un filtre
Lustre travaille sur des flots de données. Si X est une variable Lustre il
désigne alors le flot X = (x1, x2, . . .),
xn ´étant la valeur de X `a l'instant n.
X y
Suite des instants
Suite des instants
Flotx
Floty
5
10. Approche flot de données
6
L’approche flot de données consiste `a représenter un programme par un graphe
où les nœuds sont des operateurs qui transforment des flots de données.
+
+
*
X
Y
Z
U=X+1
V=2*Y+Z
12
1. Lustre – Les principes de base
11. Un flot de données
X est un couple constitue :
1. d’une suite infinie de valeurs d’un certain type T, noté
(x1, x2, . . . , xn, . . .)
2. d’une horloge définissant les instants où les valeurs du
flot sont définis.
Une horloge est soit :
• un flot de données de type booléen.
• ou bien une horloge de base.
Les flots qui ont pour horloge l’horloge de base sont dit continus,
Les autres sont dit semi-continus. Chaque position de la suite de valeurs du flot correspond `a la notion
intuitive d’instant.
Les flots de données et les horloges
1. Lustre – Les principes de base
7
12. Les flots de données et les horloges
Exemples
• Un flot d’entiers sur l’horloge de base : (4, 2, . . . , 7, . . .)
• Un flot de booléens, noté B, sur l’horloge de base : B = (vrai , faux, vrai , faux, . . .)
1. Lustre – Les principes de base
8
13. 1. Lustre – Les principes de base
Un programme Lustre
9
Opérateurs lustre
Nœuds Intermédiaires
Flots d’E du nœud principal
Flots de S du nœud principal
Flots intermédiaires
constantes
Fig: Schéma représentant un programme Lustre
Noeud Principal
14. 2.Structure
d’un
programme
Lustre
[ déclaration des constantes]
[ déclaration de types et de fonctions externes ]
node nom ( déclaration des flots d’entrées )
returns( déclaration des flots de sorties ) ;
[var déclaration des flots internes ;]
let
[ assertions ;]
système d’équations définissant une et une seule fois les flots
internes et de sorties en fonction d’eux mêmes et des flots d’entrées
Eq1;
Eq2;
... ;
Eqn;
tel
[ autres noeuds]
10
15. +
17
<
Marche/Arret
Fig: Schéma et code Lustre d’un thermostat
Capture 1
Capture 2
node thermos(C1,C2 : real)
returns(M A : bool) ;
let
M A=((C1+C2)<17.0 tel
Exemple 1: de programme
Lustre
Temps 1 2 3 4
C1 10 15 12 8
C2 5 5 7 5
M_A Vrai Faux Faux Vrai
Exemple d’une exécution
11
16. 3. Les Operateurs de Lustre
1. Les operateurs classiques
• Les opérateurs arithmétiques :
• Binaire : +, -, *, div, mod, /
• Unaire : -
• Les opérateurs logiques :
• Binaire : or, xor, and, =>
• Unaire : not
• Les opérateurs de comparaison : =, <>, <, >, <=, >=
• L’ opérateurs de contrôle if . then . else ., peut se traduire
“quand . alors . sinon .” au lieu de si . alors . sinon .
• Les constantes :
• true = (true, true, ...)
• 0 = (0, 0, ...)
• I 1.45 = (1.45,1.45, ...)
Exemple 2 : un nœud qui additionne ou soustrait deux flots
d’entiers :
Soit AS un flot d’entrée booléen,
Soit X1, X2 deux flots d’entrées entiers,
Soit Y un flot de sortie entier,
X1 + X2 quand AS est vrai
Y=
X2 − X1 autrement
node AddSub(AS :bool ;X1,X2 :int)
returns(Y :int) ;
let
Y = if AS then X1+X2
else X2-X1 ;
tel
12
17. Exemple 3: Un programme lustre
un programme Lustre qui prend en entrée un flot réel E, en
sortie deux flots : un flots booléen B qui devient vrai quand
l’entrée dépasse 100 et un flot de sortie réel S qui renvoie 0
quand B est faux et qui renvoie la différence E-100 quand B est
vrai.
node diff(E : real)returns(B :bool ;S :real) ;
let
B= E>100.0 ;
S= if B then 0.0 else E-100.0 ;
tel
Le prototype du nœud est le suivant
100
>E B
S
13
18. 3. Les Operateurs de Lustre
2. Les operateurs temporels
• pre (précèdent) : opérateur permettant de travailler sur le passé d’un flot
• −> (suivi de) : opérateur permettant d’initialiser un flot
• when (sous ´échantillonnage) : opérateur permettant de transformer un flot continu en un flot semi-continu
• crurent (sur ´échantillonnage) : opérateur permettant de transforme un flot semi-continu en un flot continu.
Afin de définir l’horloge d’un flot, on ajoute une nouvelle structure de type : T when B
T est un type classique
B est une variable de flot de type bool ou de type bool when B
ETC…..
14
19. 3. Les Operateurs de Lustre
• pre (précèdent) : opérateur permettant de travailler sur le passé d’un flot
Syntaxe :
Soit X un flot d’entrées entier
Soit Y un flot de sorties entier
(Y1,Y2,Y3, . . .) = (X1,X1 + X2,X1 + X2 + X3, . . .)
node CumSum(X :int) returns(Y :int) ;
let
Y = X −> (X + pre(Y)) ;
te
15
20. 3. Les Operateurs de Lustre
• −> (suivi de) : opérateur permettant d’initialiser un flot
• when (sous ´échantillonnage) : opérateur permettant de transformer un flot continu en un flot semi-continu
• crurent (sur ´échantillonnage) : opérateur permettant de transforme un flot semi-continu en un flot continu.
Afin de définir l’horloge d’un flot, on ajoute une nouvelle structure de type : T when B
T est un type classique
B est une variable de flot de type bool ou de type bool when B
ETC…..
16
21. 4. Vérification formelle en lustre
1. Un modèle du programme compréhensible par le prouveur utilisé Ici modèle lustre = modèle exprimable sous
forme d’automate
2. Un prouveur pour vérifier les propriétés logiques
3. Une logique pour d’écrire les propriétés `a prouver on utilise ici la logique temporelle Safety Logic
4. Des assertions permettent au concepteur d’´écrire des hypothèses sur l’environnement extérieur et/ou sur le
programme lui-même.
17
22. Automat
Un automate est un graphe orienté permettant de d’écrire
l’ensemble des ´états possibles d’un système ainsi que son
comportement dynamique.
Un programme Lustre définie un automate fini car son espace
mémoire est borné (Pas d’allocations dynamiques).
4. Vérification formelle en lustre
18
23. Safety logic
En vérification formelle Lustre, la logique permettant de décrire les
formules `a vérifier est exprimable en langage Lustre.
4. Vérification formelle en lustre
SL: C’est une logique temporelle `a temps qualitatif (notion d’ordre
entre les ´évènements),
19
24. Assertion
assert(not(X and Y)) ;
Affirme que les flots booléens X et Y ne doivent jamais ˆêtre vrais simultanément.
assert(true -> not(X and pre(X))) ;
Affirme que le flot booléen X ne transporte jamais deux valeurs vraies consécutive
4. Vérification formelle en lustre
20
25. Schéma général de la vérification en Lustre
Pg
Nœud lustre à
vérifier
Phi
Nœud Lustre
formalisant
la propriété
à vérifier
Sortie= Flot
Booléen
Pg_Phi
Entrées
Sorties
Fonctionnement d’un Model Checker
Pg : Programme à vérifier
Phi : Nœud formalisant la propriété à vérifier.
Il possède comme entrées les flots d'entrée
et de sortie du noeud Pg.
En sortie on a un seul flot de type booléen : celui-ci
doit toujours être vrai si la propriété est vérifiée.
Pg_Phi : programme de vérification utilisant les nœuds
intermédiaire Pg et Phi.
L'outil de vérification LESAR est un model checker
capable de vérifier si la propriété est vérifiée
quelque soit l'état du nœud.
4. Vérification formelle en lustre
21
26. 5. Exemple Concert - le chronomètre STOP WATCH
Le but est de spécifier le comportement d’un chronomètre simplifié.
Le chronomètre dispose de 3 entrées de trois boutons :
• on off : permet d’activer et de désactiver le chronomètre ;
• reset : remet le chronomètre `a zéro quand le chronomètre est
• désactivé ;
• freeze : gèle ou dégel l’affichage quand le chronomètre est actif.
Prototype du nœud :
node STOP WATCH(on off, reset, freeze : bool)
returns (time : int )
22
27. 5. Exemple Concert - le chronomètre STOP WATCH
Etape 1: L’opérateur Count
Spécification :
Remise `a 0 si reset, sinon il est incrémenter si X;
Tout se passe comme si C valait 0 `a l’origine.
node COUNT(reset, X : bool) returns (C : int) ;
let
C = if reset
then 0
else if X
then (0 − pre(C)) + 1
else (0 − pre(C)) ;
tel
23
28. 5. Exemple Concert - le chronomètre STOP WATCH
Etape 2: L’opérateur Switch
Spécifications :
Passe de False `a True si on ;
Passe de True `a False si off ;
Tout se comporte comme si S ´était False `a l’origine ;
Doit fonctionner correctement même si off et on sont les
mêmes.
Hypothèses sur l’environnement extérieur :
On et Off ne sont jamais `a True deux fois de suite... Cette
hypothèse simule un appui court sur un interrupteur, par
exemple...
24
29. 5. Exemple Concert - le chronomètre STOP WATCH
Etape 2: L’opérateur Switch
node SWITCH ( on, off : bool ) returns ( S : bool ) ;
assert( not(on and pre(on)) )
assert( not(off and pre(off)) )
let
S = if (false -> pre(S))
then not off
else on ;
tel
25
30. 5. Exemple Concert - le chronomètre STOP WATCH
Etape 3: STOP WATCH
node STOP WATCH (on off, reset, freeze : bool)
returns (time : int) ;
assert(true -> not(on off and pre(on off)))
assert(true -> not(reset and pre(reset)))
assert(true -> not(freeze and pre(freeze)))
var running, freezed : bool ;
cpt : int ;
let
running = SWITCH (on off, on off) ;
freezed = SWITCH( freeze and running,
freeze or on off) ;
cpt = count( reset and not running, running) ;
time = if freezed
then ( 0 -> pre(time))
else cpt ;
tel
26
31. 6. LUSTRE et l’industrie
The Power of PowerPoint |
thepopp.com
27
En 1993, Lustre a ´été transfère dans le milieu industriel avec grand succès.
Il est aujourd’hui intègre dans l’outil industriel SCADE, fournit par ESTEREL Technologies,
pour le développement de systèmes de contrôle-commandes critiques.
SCADE est notamment utilisé par Airbus, Schneider Electric, Eurocopter...
32. 7.Avantages & Limites de Lustre
28
Approche fonctionnelle
Qui possède toutes les propriétés mathématiques associes et
en particulier.
• absence d’ordre dans l’´écriture des instructions.
• cela facilite la vérification, la réutilisation et la
transformation de programmes.
Approche `a parallélisme vrai
où les contraintes de séquencement et de
synchronisation ne proviennent que des flots de
données,
• ce sont les flots de données qui déterminent les
séquences d’exécution et de synchronisation.
• Cela facilite la synthèse de programmes
parallèles.
1.Avantages
33. The Power of PowerPoint |
thepopp.com
29
• La difficulté essentielle provient de l'aspect déclaratif du langage.
• Il n'y a pas d'instruction de contrôle dans le langage Lustre
• Toute la structure de contrôle du code objet doit donc être synthétisée par le compilateur.
Cette synthèse consiste à construire un automate fini en simulant exhaustivement le comportement des variables
booléennes du programme.
7.Avantages & Limites de Lustre
2. Limites
34. 8.Articles
30
Date début: 2017-01-04
Date début: 2017-01-07
Titre de du congrès :JFLA 2017 - Vingt-
huitièmes Journées Francophones des
Langages Applicatifs,
Auteurs: Steven Varoumas , Benoît Vaugon
Emmanuel Chailloux
Audience : Internationale
Pays : France
Lien: https://hal.archives-ouvertes.fr/hal-
01446225v1
La programmation synchrone à flots de données semble être un candidat de choix pour le développement
de tels systèmes qui peuvent être parfois critiques.
35. 8.Articles
31
Date début: 2017-01-04
Date début: 2017-01-07
Titre de du congrès :Vérification de la
génération modulaire du code impératif pour
Lustre
Auteurs: Timothy Bourke , Pierre-Evariste
Dagand , Marc Pouzet , Lionel Rieg
Audience : nationale
Pays : France
Lien:https://hal.archives-
ouvertes.fr/hal-01446225v1
la traduction de programmes Lustre vers des programmes d'un langage impératif. Le défi est de passer d'une
sémantique synchrone flot de données, où un programme manipule des flots, à une sémantique impérative,
où un programme manipule la mémoire de façon séquentielle.
36. 8.Articles
32
Datede soutenance : 2016-06-28
Titre de téhse :Un langage formel pour la
conception, la spécification et la vérification
d’interfaces homme-machine embarquées
critique
Auteurs: Vincent Lecrubier
Pays : France
Lien:https://tel.archives-ouvertes.fr/tel-
01455466v1v1
37. 9.Conclusion
The Power of PowerPoint |
thepopp.com
33
Le langage est conçu de manière à permettre une interprétation synchrone des suites. La nature du
langage (dont la sémantique s'exprime simplement) permet des manipulations formelles sur les
programmes dans le but de faire des vérifications et des preuves de correction.
L’utilisation du langage pris dans différents domaines (temps réel classique, automatique, systolique,
spécification et conception des circuits)