FR 2968809 A1 20120615 FR 1060298 A 20101209 PROCEDE ET DISPOSITIF PERMETTANT DE GENERER UN SYSTEME DE CONTROLE A PARTIR DE COMPORTEMENTS REDOUTES SPECIFIES L'invention concerne un procédé et un dispositif permettant, à partir de la spécification en un langage formel d'un comportement redouté, de générer automatiquement un agent observateur ou détecteur de comportement redouté, appelé moniteur, capable, en ligne, pendant une durée arbitraire et 1 o sans perte de performance, de signaler toute occurrence dudit comportement redouté spécifié lors du fonctionnement d'un système susceptible de produire ce comportement. Elle permet la génération automatique de détecteurs de comportements spécifiés en logique temporelle linéaire métrique, ayant une mémoire bornée, capable de fonctionner en ligne et pendant un temps 15 arbitrairement long. Elle est notamment utilisée pour le contrôle et la surveillance de systèmes simulés ou encore de systèmes physiques. Elle permet aussi d'effectuer des diagnostiques en ligne de systèmes de contrôle-commande, des surveillances d'environnements en domotique ou robotique. Elle est aussi 20 mise en oeuvre pour la preuve de propriétés sur des exécutions/simulation finies. Différentes industries sont concernées par l'invention, comme : les industriels du transport, des télécoms, des services Internet, de la robotique ou encore de la domotique. 25 Dans l'art antérieur il existe principalement deux approches de gestion formel « monitoring formel » connues du Demandeur. Une première approche est due à Prasanna Thati et Grigore Rosu. Cette approche est décrite dans l'article intitulé « Monitoring Algorithms For Metric 30 Temporal Logic Specifications » décrit dans le document « electronic notes in theorical computer » march 2004. Cette approche propose de générer un moniteur pouvant fonctionner en ligne, à partir d'une logique métrique linéaire. Le procédé de Thati et Rosu est basé sur la réécriture et l'évaluation dynamique de formules et engendre de fait plusieurs limitations. Le principe de cette approche consiste à exploiter l'expression même du problème du monitoring à savoir « est-ce qu'un comportement observé satisfait cl) » où cl) est une formule qui spécifie un comportement redouté. Problème que l'on peut noter plus brièvement : C/=cl) ? (Lire : est-ce que le comportement observé C valide cl) ?) Avant d'avoir observé le système, le problème se pose donc comme suit : Ql /= c ? où 0 dénote le comportement vide Le procédé de Thati et Rosu fonctionne ainsi : il maintient l'expression du problème de la satisfaction à mesure que les observations arrivent, en tenant compte de celles-ci. Si, à un certain stade, le problème du monitoring s'exprime sous la forme « C /= 'n ? » et qu'une nouvelle observation o est disponible, il calcule en+1, une nouvelle formule, telle que l'on ait : CI=fin =C.o/=fin+1 où C.o est le comportement défini comme le comportement C suivi de l'observation o. Par transitivité : /= cl) ~...~C/=fin C.o1=fin+1 Le principe consiste donc à réécrire l'expression du comportement redouté en fonction des évènements déjà observés du système, tout en maintenant la problématique initiale, à savoir « ,Q1 /= c ? ». Ce que les auteurs « appellent résoudre le passé et dériver le futur ». Pour prendre un exemple intuitif de la vie courante, la validité de l'assertion « il fera beau dans 8 jours » prononcée aujourd'hui, est la même que celle, le lendemain, de l'assertion « il fera beau dans 7 jours » et encore la même que celle, 8 jours plus tard, de l'assertion « il fait beau aujourd'hui » (qui pourra être décidée par observation directe). Pour ne pas stocker la trace d'exécution (afin que le moniteur garde une mémoire bornée), il est nécessaire de maintenir en permanence une table de vérité de toutes les formules qui peuvent potentiellement apparaître lors du procédé de réécriture. De la sorte, il est possible de calculer la valeur de vérité de la formule principale en utilisant les valeurs contenues dans la table. Mais, pour que le moniteur ait une mémoire bornée, il faut que cette table soit finie et par conséquent que l'ensemble des sous-formules pouvant apparaître soit lui-même fini. Or ceci n'est possible que si les pas d'exécution permis sont en nombre finis et connus à l'avance. Ainsi ce procédé présente 1 o notamment les inconvénients suivants : - La logique de spécification ne supporte que des intervalles dont les bornes sont des entiers naturels, - Les pas d'exécution permis pour le système doivent être en nombre finis et connus à l'avance. Dans l'article précité, les pas d'exécution 15 permis sont des entiers naturels (ainsi que l'indiquent les définitions de F+(I) et F-(I )), - Enfin, l'algorithme est très consommateur de temps puisque la complexité estimée est de l'ordre de m323m où m est le nombre total de sous-formules obtenues à partir de la formule principale (l'ordre de 20 grandeur de m par rapport à la formule principale n'étant quant à lui pas donné dans l'article). Une deuxième approche connue du Demandeur est décrite dans le document intitulé « Monitoring Temporal Properties of Continuous Signais » de Oded Maler et Dejan Nickovic. Le moniteur d'Oded Maler et Dejan 25 Nickovic se base sur le calcul des intervalles de validité d'une formule. Pour une formule donnée, et un comportement donné, le procédé de Maler et Nickovic calcule un ensemble d'intervalles de temps qui dénotent les dates où la formule est vraie et en dehors desquels la formule est fausse. Le calcul est fait d'abord pour les formules de base (propositions) puis pour les 30 formules plus complexes. Pour cela, les auteurs définissent une correspondance entre les opérateurs de la logique de spécification et les opérations classiques sur les ensembles d'intervalles (intersection, union ...). Par exemple, en connaissant les intervalles de validité de deux formules 4.1 et 4.2, il est possible de déduire qu'un intervalle i est dans l'ensemble des intervalles de validité de la formule 4.1 A 4.2 si et seulement s'il existe un intervalle j de 4.1 et un intervalle k de 4'2 tels que i = j n k. Cette technique permet le calcul des intervalles pour une logique temporelle qui supporte des intervalles dont les bornes ne sont plus limitées aux entiers et l'analyse d'exécutions dont le pas est libre. Outre le fait qu'il n'existe pas d'opérateurs sur le passé dans la logique présentée, l'approche souffre d'un défaut 1 o essentiel, indiqué par les auteurs. Le moniteur d'Oded Maler et Dejan Nickovic travaille hors ligne, sur une exécution enregistrée. Ceci représente une limitation importante car, sur un temps d'exécution long, le stockage de l'exécution peut ne pas être praticable (système autonome, embarqué ...). Ceci limite donc les temps de surveillance et de fait aussi les applications. 15 La Demande de brevet WO2010/026150 du Demandeur décrit un procédé et un système permettant de générer un dispositif de contrôle à partir de comportements redoutés spécifiés. Malgré tous les avantages qu'elle présente, l'invention décrite dans ce document repose sur un langage 20 souffrant plusieurs limites : o ses expressions de bases sont limitées à des variables booléennes, o il ne permet pas de référer aux instants singuliers où une formule change de valeur de vérité (interdisant par exemple l'expression de propriétés portant sur la durée), 25 o il ne permet pas de translater dans le temps la valeur d'une expression, o il ne permet pas de compter les évènements, o il ne permet pas de spécifier des équations complexes. L'objet de la présente invention concerne un procédé permettant, à partir de 30 la spécification d'un comportement redouté en un langage de logique temporisée, de générer automatiquement un détecteur ayant la capacité de signaler par la génération d'un signal représentatif toute occurrence dudit comportement redouté lors du fonctionnement d'un système placé sous sa surveillance au moyen de capteurs, ledit détecteur étant caractérisé en ce qu'il comporte au moins les étapes suivantes mises en oeuvre par un processeur: - définir des variables caractéristiques du système à surveiller Xm}, - définir un certain nombre de propositions {p,, ..., Pli} sur ces variables, - allouer en mémoire du détecteur un espace suffisant pour mémoriser 1 o un instantané relatif à ces propositions et à ces variables de signaux c'est-à-dire allouer pour le temps une variable réelle notée I.t, pour chaque proposition p une variable I.p et pour chaque variable de signal x une variable I.x, - définir une formule principale c, construite sur les propositions {p,, ..., 15 Pli} et les variables {x,, ... xm} traduisant un comportement redouté ou une propriété du système en utilisant un langage composé d'opérateurs logiques et d'opérateurs temporels portant sur le futur et le passé et dont les termes T et les formules cl) sont donnés par les grammaires BNF suivantes : 20 F::=c1x1([',...,F)If(F) T := F I ( T , . . . , T ) 1 V[a~ T 1 N;cl) 1 Top T 1 Bot T I X[n] F I f(T ) B ::= O(F) I (B ) c::=B 10( T )IV[a] cl) 25 1 X[n] B Icl) [Ji+cl) Icl) Si+cl) 1 S(d,k) C 1 Top cl) 1 Bot cl) 1 (d') où f est un symbole de fonction, O un symbole de prédicat, a est un réel non nul, d un réel positif ou nul, n un entier relatif non nul, i+ tout intervalle dont les bornes sont positives ou nulles, i un intervalle standard quelconque ou un intervalle infini seulement à gauche, et dont la sémantique est la suivante : - Si c est une constante alors le terme c (dans le langage) dénote la fonction constante c(t) qui vaut toujours c, - Si x est un signal alors à la date t le terme x (dans le langage) vaut I.x où I est le plus proche instantané situé avant t, on notera x(t) cette valeur, - A la date t un n-uplet de termes (61, ..., an) vaut (61(t), ..., an(t)) où ak(t) dénote la valeur du terme ak en t, - A la date t le terme f(6) vaut f(a(t)), - L'opérateur V[a] est un opérateur de translation temporelle ; V[a]C vaut en t ce que vaut cl) en t+a, le terme N1 vaut l'entier n à la date t si n est le nombre d'intervalles de validité de cl) qui ont une intersection non vide avec iOt, - X[n] est un opérateur de décalage. Le terme X[n] a vaut en t ce que vaut le terme a selon l'instantané I(k+n) OÙ lk est le plus proche instantané situé avant t, - L'opérateur Top est appelé opérateur de front montant. Top cl) vaut la valeur v en t si cl) passe de la valeur u à v (u ~ v) en t, - L'opérateur Bot est appelé opérateur de front descendant, Bot cl) vaut u à la date t si cl) passe de la valeur u à la valeur v (u ~ v) en t, - O(a) est en vraie en t si 6(t) E O.set, - L'opérateur U;+ porte aussi sur le futur, la formule 4.1 U;+ .1)2 est vraie en t si et seulement s'il existe une date t' de (i+)Ot où 4'2 est vraie et que 4.1 est partout vraie dans l'intervalle [t, t'[, - L'opérateur S;+ porte aussi sur le passé, la formule 4.1 S;+ .1)2 est vraie en t si et seulement s'il existe une date t' de (rev(i+))Ot où 4'2 est vraie et que 4.1 est partout vraie dans l'intervalle ]t', t], - L'opérateur S(d,k) porte aussi sur le passé, c1S(d,ke'2 signifie : « .1)2 sera vraie vers le passé au-delà de -d et 4.1 sera partout vraie entre temps ». 4.1 S(d,k) '132 est vraie en t s'il existe une date t' au delà de t-d (t-d comprise si k = 1 et t-d non comprise si k = 0) dans le passé où 4.2 est vraie et que 4.1 est partout vraie sur ]t',t], Une étape d'émission d'un signal Sc sur au moins une des sorties dudit processeur dans le cas où le comportement redouté ou la propriété du système spécifiée en logique temporelle linéaire métrique est observé. 1 o D'autres caractéristiques et avantages du dispositif selon l'invention apparaîtront mieux à la lecture de la description qui suit d'un exemple de réalisation donné à titre illustratif et nullement limitatif annexé des figures qui représentent : - La figure 1A, un synoptique du procédé selon l'invention et la figure 15 1B un exemple d'architecture du système permettant sa mise en oeuvre, - La figure 2, une représentation de la notion de processus, - La figure 3, un algorithme de calcul de la liste de validité d'une proposition ou d'une formule dite purement booléenne, 20 - Les figures 4A et 4B, représentent la sémantique pour certains opérateurs utilisés dans le procédé selon l'invention, - Les figures 5A, 5B, 5C, 5D illustrent le calcul de la liste de validité d'une formule en fonction de celles de ses sous-formules, - La figure 5E, illustre un calcul de listes de validité associé à un 25 l'opérateur Top{@}; permettant de parler du nombre d'instants où une formule passe de faux à vrai, - La figure 5F, illustre un calcul de listes de validité associé à l'opérateur X[n], - La figure 6 illustre l'intervalle de définition pour l'opérateur Ni du 30 langage, - La figure 7, illustration de la définition d'une zone d'influence prise en compte pour la mise en oeuvre du procédé selon l'invention, - La figure 8, illustration de l'inutilité des sous-formules directes d'une formule étant donnée la date d'inutilité fixée pour celle-ci, - Les figures 9A et 9B illustrent un cas d'étude pour la surveillance d'un signal et de sa conformité à un signal de référence pour le diagnostic embarqué, et - La figure 9C illustre l'interfaçage entre une réalisation du procédé et l'environnement d'ingénierie industrielle Simulink de MathWorks connu de l'Homme du métier. L'idée de la présente invention consiste notamment à générer un moniteur capable d'observer le comportement d'un système dans un environnement donné et plus particulièrement l'évolution d'un processus au sens qui sera défini plus loin la présente description. La figure 1A est un synoptique d'un exemple du procédé selon l'invention comprenant un système 1 dont le comportement est à observer, une horloge temporelle H permettant de déterminer la date à laquelle un instantané a été acquis, un processeur 13 qui va traiter les données issues du système à surveiller, par exemple une variable observée à un instant donné et qui va être capable d'évaluer la valeur des propositions où cette variable apparaît, de calculer ensuite les listes de validité attachées à ces propositions puis les listes de validité des formules plus complexes jusqu'à la liste de validité de la formule principale spécifiant le comportement redouté. Sur la figure 1B est représenté un exemple de système comprenant un moniteur ou détecteur de comportement redouté selon l'invention qui comporte, le système 1 dont le comportement est surveillé. Le système comprend un ou plusieurs capteurs 10 permettant de déterminer la valeur de chaque paramètre représentatif du comportement surveillé. Par exemple, il est possible d'avoir un capteur de température et de vérifier si une proposition portant sur la température est vraie. Des exemples sont donnés ci-après. Le ou les capteurs de paramètres équipant le système 1 sont reliés à un détecteur de comportement redouté 11 comprenant une entrée 12 et un processeur 13 qui va traiter les différentes données ainsi qu'une mémoire 14 stockant l'instantané courant et les listes de validité de chaque formule. Le dispositif 11 comprend aussi une entrée 15 recevant une horloge spécifiant une date associée à un paramètre mesuré. Le processeur 13 va délivrer via une ou plusieurs sorties 161, 162, 163, un signal Sc contenant des données permettant, par exemple : - Soit l'affichage des résultats sur un dispositif d'affichage 17, 10 - Soit la génération d'un signal à un dispositif de régulation du système, - Soit la génération d'un signal d'alarme. Le signal obtenu est transmis à un dispositif de génération d'une alarme et/ou à un système de contrôle ou de régulation du système collaborant avec 15 le moniteur généré par le procédé selon l'invention. Le système dont le comportement est surveillé peut être un modèle exécuté en simulation. Ce modèle peut parfaitement être très complexe et/ou de grande taille étant donné que le moniteur généré selon l'invention ne dépend pas de la structure interne de ce modèle. Dans ce cas, le procédé peut être 20 considéré comme une technique de débogage de modèles. Le système peut aussi être un dispositif ou un système physique dont on souhaite contrôler le comportement en fonctionnement et notamment vérifier son comportement. Le procédé peut alors être considéré comme une sous-partie d'un système plus vaste de contrôle-commande. 25 Ainsi, le système selon l'invention peut être appliqué comme dispositif permettant de détecter des erreurs dans le fonctionnement d'un système, plus connu sous l'expression « débogueur » de systèmes simulés, ou comme moniteur de systèmes physiques pour en détecter les disfonctionnements ceci dans tout domaine industriel (transport, domotique, 30 robotique). Un moniteur selon l'invention est constitué notamment de plusieurs éléments qui vont être explicités ci-après. Fondamentalement son fonctionnement consiste à maintenir sur certaines plages temporelles une représentation en fonction du temps de la valeur prise par chaque expression constituant l'expression du ou des comportements redoutés. A cet égard un des éléments entrant dans la génération du moniteur est la notion de liste de validité qui est représentée par exemple dans les figures 5A, 5B, 5C et 5D et 5 E, 5F. Avant d'aborder la génération d'un moniteur dans toute sa généralité nous 1 o pouvons l'illustrer sur un exemple. Supposons que le procédé soit utilisé pour détecter le passage en négatif du solde d'un compte bancaire. Le comportement redouté s'exprimerait ainsi: solde De la même manière pour la constante 0 la liste représentant sa valeur au cours du temps sera représentée par la liste: ([0,3]"0) 30 Et enfin la liste de la variable (solde ([0,1 ["(100 On peut voir qu'en [3,3] la valeur attachée est 1 ce qui signifie que l'expression (solde Le procédé selon l'invention repose sur une généralisation de cette approche. Au préalable, des définitions sont introduites. Etats et comportements et variables d'un système Le comportement d'un modèle de système ou d'un système physique est représenté par l'évolution dans le temps d'un certain nombre de variables caractéristiques. Par exemple, le comportement d'un corps en physique des solides est caractérisé par l'évolution de ses variables caractéristiques que sont sa position, sa vitesse, son accélération, son moment cinétique, etc. Une assignation des variables caractéristiques d'un système décrit un état de ce système. Un comportement est alors une fonction qui à toute date de la vie du système associe un unique état de ce système. Signaux et Propositions. A l'égard d'un système le terme « proposition » désigne toute expression faisant référence aux variables caractéristiques du système et pouvant être vraie ou fausse. Par exemple « la vitesse du corps k vaut 10 m/s », « la vitesse du corps k est strictement positive », sont des propositions classiques en physique des solides. Mathématiquement, ces propositions seraient notées « vk = 10 », « vk > 0 ». Nous voyons que ces expressions peuvent être vraies ou fausses. Par exemple, si la vitesse observée du corps k est de m/s, alors la proposition « Vk = 10 » est fausse puisque « 5 = 10 » est fausse. En prenant la convention que la valeur 1 représente « être vrai » et que 0 représente « être faux » nous pouvons assimiler les propositions à des 5 variables de domaine {0,1}. Ainsi il sera considéré que les propositions définies relativement à un système sont elles-mêmes des variables du système. Néanmoins, dans le discours, pour distinguer entre les variables du système et les propositions 1 o constituées sur ces variables, on parlera de propositions ou de variables booléennes pour les premières et de signaux pour les secondes. Notons qu'il n'est pas exclu qu'un système possède nativement des propositions. 15 Instantané Lorsqu'on observe un système il n'est pas concevable d'enregistrer son comportement réel au sens défini plus haut. Le temps théorique étant continu cela supposerait une infinité d'observations. En revanche on peut observer 20 l'état d'un système de façon ponctuelle et répétée, selon un pas fixe ou variable. Aussi, cela peut être le système lui-même qui prenne l'initiative de livrer à un observateur, à son rythme, ses changements d'états. Quel que soit le cas de figure, nous appellerons instantané le résultat d'une observation, soit la donnée : 25 - de l'état actuel du système observé (c'est-à-dire d'une assignation de ses variables caractéristiques), - de la date à laquelle cette observation a été faite. Un instantané donne donc, à une certaine date, la valeur des variables du système observé. 30 Si I est un instantané et x une variable du système (proposition ou signal) on notera I.x la valeur que 1 donne à x ; la variable t sera réservée au temps, ainsi on réservera la notation Il pour dénoter la date indiquée par l'instantané I. Relativement à un système sys, ISys dénote l'ensemble des instantanés 5 possibles du système sys. Rafraichissement de l'instantané Dans la mise en oeuvre du procédé selon l'invention on considérera une structure allouée en mémoire du calculateur capable de stocker les informations contenues dans un instantané, à savoir la valeur du temps et la 1 o valeur des variables. Ces valeurs seront actualisées (réécrites dans la même zone mémoire) à chaque observation du système, phénomène que nous appellerons rafraichissement de l'instantané. Une seule structure de ce type est nécessaire au procédé car, comme nous le verrons, son fonctionnement ne requiert la mémorisation que d'un seul instantané. 15 Pour cette structure, seront employées les notations introduites ci-dessus. En outre cette structure sera souvent appelée I, et I.x dénotera la valeur de la variable x selon cette structure dans son état actuel. I.t dénote la valeur du temps enregistrée dans cette structure. 20 Processus. Dans le contexte de la présente invention le terme processus est utilisé pour désigner toute suite d'instantanés indicée par une section initiale des entiers naturels. Pour rappel une section initiale des entiers naturels est tout sous- 25 ensemble H des entiers naturels vérifiant : - 0e H - pour tout i e H, si i> O alors i -1 E H Mathématiquement un processus n est donc toute application de H dans ISys telle que : 30 - H est une section initiale des entiers naturels - si i et i+1 sont dans H alors n(i).t n.last.t alors on note ]z-1 le processus n' de [0,n+1 ] dans Isys égal à n sur [0,n] (c'est-à-dire n'(k) = n(k) pour k E [0,n]) et tel que n'(k+1) = 1. 20 ]z-1 sera appelé le prolongement den selon 1. Encadrements d'un processus Soit n un processus de [0,n] dans Isys. Nous dirons que le processus n' de [0,m] dans Isys est un encadrement den si : 25 - m n et - il existe un entier k 0 tel que n'(k+i) = n(i) pour tout i de [0,n] En somme un encadrement d'un processus n est le processus n auquel on a ajouté des instantanés avant ou après ou les deux à la fois. 30 Dans la mise en oeuvre du procédé un processus n'a pas besoin d'être mémorisé en tant que tel. Les définitions introduites ici sur la notion de processus visent donc principalement à être utilisées pour la description de ce procédé. Notons cependant que le processus peut être mémorisé par le procédé lui-même en ce sens que la mesure du temps et le numéro d'un instantané peuvent aussi être considérés comme des variables du système. Cet aspect sera utilisé plus loin pour un opérateur particulier du langage de description des comportements redoutés (l'opérateur X[n]) 1 o Intervalles Dans la suite il sera question d'intervalles dans l'ensemble des nombres réels noté 9Z. Pour noter un intervalle deux notations seront utilisées Al .la notation usuelle telle:] 4.32, 6.21] A2.la notation sous forme de quadruplet (I, lb, ub, u) où: 15 A2.1. lb : borne inférieure A2.2. ub : borne supérieure A2.3. I et u sont éléments de {0,1}. Ils dénotent l'ouverture ou la fermeture de l'intervalle sur les bornes lb et ub. Si I vaut 0 l'intervalle est ouvert sur sa borne inférieure lb, fermé si I vaut 1. Idem pour u qui spécifie 20 l'ouverture/fermeture sur la borné supérieure ub. Exemple : le quadruplet (0, 4.32, 6.21, 1) représente le même intervalle que celui noté ]4.32, 6.21]. 25 Si i est un intervalle alors i.l, i.lb, i.ub et i.0 dénotent les paramètres ci-dessus mentionnés. Donc, par exemple, si i est ] 4.32, 6.21] alors : - i.lb est 4.32 - i.ub est 6.21 - i.0 est 1 30 - i.l est 0 Pour qu'un intervalle i soit bien formé il faut soit que i.lb Comme les paramètres de fermeture d'intervalle sont des variables de {0,1} 10 on pourra indifféremment les combiner selon les opérateurs arithmétiques usuels ou selon les opérateurs booléens usuels. Les principales équivalences sont données ci-dessous : - ~u=(1 -u) - unv=uxv 15 - uvv=u+v-(uxv) - uv=-iuvv=((1 -u)+v)-((1 -u)xv) Soient i et j deux intervalles on notera j .J i l'intervalle suivant : (i.l j.l, j.lb - i.lb, j.ub - i.ub, i.0 j.u) 20 Exemple : [5,8[ .J ]3,4] = (01, 5-3, 8-4, 1 0) = (1,2,4,0) = [2,4[ Si i et j sont deux intervalles, nous dirons que i est strictement inférieur à j et nous noterons i Si i est un intervalle alors : - L'intervalle noté i] , appelé fermé à droite de i, est (i.l, i.lb, i.ub, 1) ou 30 bien encore, de façon équivalente est i u [i.ub, i.ub].5 - L'intervalle noté [i, appelé fermé à gauche de i, est (1, i.lb, i.ub, i.u) ou bien encore, de façon équivalente est [i.lb, i.lb] u i. - L'intervalle noté i[ , appelé ouvert à droite de i, est (i.l, i.lb, i.ub, 0) - L'intervalle noté ]i, appelé ouvert à gauche de i, est (0, i.lb, i.ub, i.u) Si i et j sont deux intervalles nous dirons que : - i chevauche j à gauche si i n j ~ 0, (i n j),Ib = j.lb et (i n j).l = j.l (autrement dit i couvre j et le dépasse éventuellement dans le passé). Exemple [0,4[ chevauche [2,5] à gauche car [0,4[ n [2,5] = [2,4[ 0 et [2,4[.Ib = [2,5].Ib = 2. Le chevauchement est stricte s'il existe une date t de i telle que, quelle que soit la date t' de j, alors t Soit (a,b) un couple de réels et i un intervalle. Alors i (a,b) dénote l'intervalle (i.l, i.lb + a, i.ub + b, i.u). Par abus de notation on notera i t, où t est un scalaire, comme abréviation 25 de : i 0 (t,t) Exemples : - [5,8[ 0+ (1,2) = [6,10[ - [5,8[ 0+ (-3,-2) = [2,6[ - [5,8[ 0+ 3 = [5,8[ 0+ (3,3) = [8,11 [ 30 Différenciel d'intervalles (j\i) Soient i et j deux intervalles tels que : i.l = j.l i.lb = j.lb j.ub i.ub alors la notation j\i dénote (1 - i.u, i.ub, j.ub, j.u) Exemples : [0,4[ \ [0,4[ = (1 - 0,4,4,0)= [4,4[ = 0 [0,4] \ [0,4[ = (1 - 0,4,4,1)= [4,4] [0,5] \ [0,4[ = (1 - 0,4,5,1) = [4,5] Intervalle à compteur Un intervalle peut éventuellement être muni d'un compteur. Il s'agit d'un attribut de type entier positif ou nul attaché à un intervalle. Nous noterons ixn pour dénoter que la valeur du compteur de i vaut n. Intervalle valué Un intervalle peut éventuellement être muni d'une valeur appartenant à un type de donnée propre au système. Par exemple cette valeur peut être d'une nature quelconque, un nombre réel, un n-uplet de réels ou d'éléments d'un autre type. Nous utiliserons la notation iAy pour indiquer que l'intervalle i porte la valeur y. Exemple : ]6.3,8.2]"(2.3, 4.45) est un intervalle dont la valeur est le couple (2.3, 4.45). Intervalles non standards Un intervalle non standard est un intervalle dont la borne supérieure est la valeur symbolique c. ou dont la borne inférieure est la valeur symbolique (ou les deux). Rappelons que c. est tel que x -oo quel que soit y un entier ou un réel. Comme ces valeurs ne peuvent être comprises, l'intervalle sera forcément ouvert sur de telles bornes. On dira que l'intervalle i est infini à gauche (resp. à droite) si borne inférieure (resp. supérieure) est -oo (resp. oo). Liste de validité Une liste de validité possède un domaine de définition qui est un intervalle. C'est par ailleurs une liste dont les éléments sont des intervalles bien formés de l'ensemble des réels 9Z, tous disjoints, rangés dans l'ordre croissant (chronologique). La notation (i1, i2, ..., in) sera utilisée pour désigner une liste de validité contenant les intervalles i1, i2, ... in. L'ordre chronologique signifie 1 o que si ik et ik+1 sont deux intervalles consécutifs d'une liste de validité nous avons toujours ik Par exemple : ([1, 2.43 [, [3.27, 5.04] ) est une liste de validité qui contient deux intervalles, [1, 2.43[ et [3.27, 5.04]. Ils sont bien rangés dans l'ordre 15 croissant ou chronologique. Pour mettre en évidence le premier ou le dernier élément d'une liste de validité nous utiliserons les notations : - (i 1 L) pour dénoter une liste dont le premier élément est i. L est aussi une liste de validité (celle des éléments qui suivent i dans (i 1 L)). L 20 peut éventuellement être vide. - (L 1 i) pour dénoter une liste dont le dernier élément est i. L est aussi une liste de validité (celle des éléments qui précèdent i dans (L 1 i)). L peut éventuellement être vide. 25 Il sera exposé par la suite qu'une liste de validité est par destination attachée à une expression et permet de définir, sur une plage temporelle donnée, les dates où cette expression est vraie et les dates où elle est fausse, en se conformant à la convention suivante : les dates qui sont à l'intérieur des intervalles de la liste de validité sont les dates où l'expression est vraie ; en 30 dehors de ces intervalles l'expression est fausse. Elle peut aussi être attachée à des expressions non booléennes pour caractériser leur évolution temporelle comme dans l'exemple introductif du suivi d'un solde bancaire. Interstices d'une liste de validité Dans une liste de validité on appelle interstice tout intervalle contenant toutes les dates situées entre deux intervalles consécutifs ou situées entre le premier intervalle et la borne inférieure du domaine temporel de la liste de validité ou situées entre le dernier intervalle et la borne supérieure du domaine temporel de la liste de validité. Formellement un interstice dans une liste de validité L de domaine D est donc soit : - (1 - ik.u, ik.ub, i(k+1).lb, 1 - i(k+1).1) si i et i(k+1) sont deux intervalles consécutifs de L - (D.1, D.lb, i.lb, 1 - i.l) si i est le premier intervalle de L. - (1 - j.u, j.ub, D.ub, D.u) si j est le dernier intervalle de L. Exemple : soit ([1, 2.43 [, [3.27, 5.04[) une liste de validité de domaine [0,6]. Ses interstices sont [0,1 [, [2.43, 3.27[ et [5.04, 6]. Liste de validité d'intervalles à compteurs Une liste de validité d'intervalles à compteurs est une liste de validité au sens défini précédemment telle que : - Tous ses intervalles sont munis d'un compteur (resp. d'une valeur) - Elle ne possède aucun interstice. Exemple : La liste ([0,1 [x0, [1,2[x3, [2,4[x0, [4,5[x2, [5,6] x0) de domaine [0,6] est une liste de validité d'intervalles à compteurs. Adjonction d'un intervalle dans une liste de validité. Le résultat de cette opération est une liste de validité. Nous distinguons entre adjonction à gauche et adjonction à droite. Néanmoins, pour chacune, si L est une liste de validité vide, l'adjonction dans L d'un intervalle i est la liste (i). Adjonction à gauche de l'intervalle i à la liste de validité (j 1 L) : - si i est vide alors le résultat est la (j 1 L). - Si i Adjonction à droite de l'intervalle i à (L I j) : - si i est vide alors le résultat est la liste (L 1 j). - si j Adionction avec compteur Cette opération ne s'applique qu'avec un intervalle à compteur et une liste d'intervalles à compteurs. L'adjonction avec compteur de l'intervalle ixn à la liste de validité d'intervalles à compteurs L répond aux règles suivantes : B.1. Si jxm est un intervalle de L inclus dans i son compteur est incrémenté de n. Autrement dit le compteur de j devient (m+n). B.2. tout intervalle jxm partiellement couvert par i ( j i, jni 0) est remplacé dans L par deux intervalles adjacents k et g (kng = 0, kug = j), de sorte que les dates de l'un, disons k soient toutes dans i (k c i) et qu'aucune date de l'autre, disons g, ne soit dans i (gni = 0); le compteur de k est fixé à m+n ; le compteur de g est fixé à m. Exemples d'adjonction avec compteur : Soit L = ([0,1 [x0, [1,2[x3, [2,4[x0, [4,5[x2, [5,00[x0) une liste de validité de d'intervalles à compteurs de domaine [0, «[. L'adjonction avec compteur de [0,3[x1 à L donne : ([0,1 [x1, [1,2[x4, [2,3[x1, [3,4[x0, [4,5[x2, [5,°°[x0) L'adjonction avec compteur de [3,00[x2 à L donne : ([0,1 [x0, [1,2[x3, [2,3[x0, [3,4[x2, [4,5[x4, [5,°°[x2) 1 o Raccordements de listes de validité Raccordement à droite. Soient (L1 1 j) et (i 1 L2) deux listes de validité. Le raccordement de (i 1 L2) à droite de (L1 1 j) a pour résultat : - si j Exemple de raccordement à droite. Soit L = ([1,2[) et L' = ([2,3[, [8,12[). Le 20 raccordement à droite de L' à L est la liste : ([1,3[, [8,12[). Ce résultat est du au fait que [2,3[ jouxte [1,2[ à droite. Raccordements de listes de validité d'intervalles valués Raccordement à droite. Soient (L1 1 j"y) et (i"x 1 L2) deux listes de validité 25 d'intervalles valués. Le raccordement de (i"x 1 L2) à droite de (L1 1 j"y) a pour résultat : - si i jouxte j à droite et que : o x = y alors le résultat est la liste (L1, (j.l, j.lb, i.ub, i.u)"x, L2) o x y alors le résultat est (L1, j, i, L2) 30 - si i ne jouxte pas j à droite et j Raccordement à gauche. Le raccordement d'une liste de validité L' à gauche d'une liste de validité L est le résultat du raccordement de L à la droite de L'. Suite à ces définitions nous pouvons maintenant formaliser le calcul de la liste de validité d'une variable Algorithme de calcul de la liste de validité d'une variable 10 Soit x une variable et x.LV sa liste de validité. Soit I une structure de mémorisation d'un instantané. C.1 Initialiser à vide la liste de validité x.LV C.2 Pour chaque rafraichissement de I C.2.1 Si x.LV est vide alors x.LV devient la liste (i) où i = [I.t,l.t]"(I.x). 15 C.2.2 Si x.LV = [LIj"y] C.2.2.1 Si I.x = y alors x.LV devient [LI(j.l, j.lb, I.t,1)"y] C.2.2.2 Si I.x # y alors x.LV devient [(L I (j.l, j.lb, I.t, 0)"y)) I [I.t,l.t] "(I.x)] 20 Pour des applications industrielles un langage restreint aux simples variables de base est naturellement trop limité. La suite de la description introduit un langage permettant de décrire des expressions plus évoluées, faisant intervenir plusieurs propositions, plusieurs variables, et permettant de décrire des notions complexes d'ordre, de concomitance, d'occurrence dans des 25 délais stricts, de décalages temporels, de changement de valeur. Définitions Dans la suite de la description, certains termes seront utilisés pour mieux comprendre et définir l'objet de l'invention, certaines définitions sont données 30 ci-dessous. 235 Quelques notions sur les ensembles et les prédicats Produit en croix d'ensembles: Le produit en croix des ensembles E et F, noté ExF, est l'ensemble des couples de la forme (x,y) où x est un élément de E et y un élément de F. Puisque ExF est aussi un ensemble, si G est un troisième ensemble, alors (ExF)xG est également défini et est le produit en croix de E,F et G. Plus généralement le produit en croix s'étend à n ensembles : soit E1 ... En des ensembles leur produit en croix noté E1x ... xEn est (E1x ...x E(n_1))xEn. n-uplet: Un élément de E1x ... xEn, n > 0, qui est de la forme (x1, ..., xn) avec x; E E; est appelé un n-uplet. Prédicat : Un prédicat sur un ensemble E est un sous-ensemble de E. Exemple : le sous-ensemble {0, 2, 4, 6 _1 des entiers naturels est appelé 15 prédicat de parité. Un entier est pair s'il appartient à cet ensemble. Symbole de prédicat : un prédicat est souvent dénoté par un symbole. Si O est un symbole de prédicat, on notera O.set l'ensemble qu'il dénote. Par exemple le symbole Notation usuelle et ensembliste d'un prédicat 25 La notation usuelle x Suivant le contexte on utilisera les notations usuelles ou les notations ensemblistes. 30 Arité d'un symbole de prédicat : Si O est un symbole de prédicat dénotant un sous-ensemble d'un produit en croix de n ensembles (O.set ç E,x ... xEn), ce symbole est dit d'arité n ou encore n-aires. On dira aussi unaire pour 1-aire et binaire pour 2-aires. Satisfaction d'un prédicat : Un élément satisfait un prédicat s'il appartient à ce prédicat. Exemples : - 3 ne satisfait pas le prédicat de parité car 3 e {0,2,4,6 ...}. - (3.23, 2.02) e Dans la suite de la présente description, le problème de la satisfaction d'un prédicat par un élément est supposé résolu par une procédure de décision existante, externe au procédé. Par exemple le problème de savoir si (2,3) E Spécification formelle des comportements redoutés Considérant les variables du système à surveiller nous supposons que ces variables viennent avec un domaine, des fonctions et des prédicats canoniques qui leurs sont propres. Par exemple, dans l'exemple du compte bancaire, nous pouvons supposer que la variable « solde » a pour domaine l'ensemble des entiers relatifs Z lequel vient avec ses prédicats classiques dont les symboles sont ,= et des fonctions classiques dont les symboles sont +,-. En premier lieu le langage se compose de termes. Langage noyau: Nous décrivons en premier un langage dit « noyau » composé d'opérateurs fondamentaux. En second lieu nous donnerons un langage plus étoffé et plus proche des applications pratiques. Le langage se compose de termes et de formules. Les formules se distinguent des termes en ce que les formules sont des expressions qui ne peuvent avoir pour valeur que 0 (faux) ou 1 (vrai). C'est pourquoi, pour les formules, nous dirons indifféremment « est vrai » pour « vaut 1 » et « est faux » pour « vaut 0 ». Termes du langaqe noyau Les termes de notre langage sont : - Tout symbole de constante est un terme - Si x est le nom d'une variable (signal ou proposition) alors x est un 10 terme - Si al, ..., an sont des termes alors le n-uplet (al, ...,6n) est un terme - Si a est un terme et a un réel différent de 0 alors V[a~ a est un terme - Si f est un symbole de fonction et a un terme alors f(6) est un terme - Si cl) est une formule au sens défini plus loin, i un intervalle standard 15 ou non-standard mais infini seulement à gauche alors Ni cl) est un terme - Si a est un terme alors Top a, Bot a et X[n] a sont des termes En notation BNF l'ensemble des termes est donné par la grammaire 20 T donnée ci-dessous: F::=cIx1(F,...,F)If(F) T:=FI(T,..., T ) IV[a]T Ni cl) ITop T IBotT IX[n]rIf(T ) où f est un symbole de fonction, cl) une expression au sens de la grammaire définie ci-après. La sous-grammaire F de T dénote l'ensemble des termes 25 dits non-décalés. Sémantique intuitive des termes du langaqe noyau: - Si c est une constante alors le terme c (dans le langage) dénote la fonction constante c(t) qui vaut toujours c. - Si x est un signal alors à la date t le terme x (dans le langage) vaut I.x où I est le plus proche instantané situé avant t. On notera x(t) cette valeur. - A la date t un n-uplet de termes (61, ..., an) vaut (61(t), ..., an(t)) où ak(t) dénote la valeur du terme ak en t. - A la date t le terme f(6) vaut f(a(t)). - Le terme V[a]a dénote la valeur du terme a décalée de a dans le temps c'est-à-dire qu'en t le terme V[a]a vaut 6(t+a) pour tout date t. - Le terme Ne vaut l'entier n à la date t si n est le nombre d'intervalles de validité de cl) qui ont une intersection non vide avec iO t. - X[n] est un opérateur de décalage. Le terme X[n] a vaut en t ce que vaut le terme a selon l'instantané I(k+n) OÙ lk est le plus proche instantané situé avant t. - L'opérateur Top est appelé opérateur de front montant. Top cl) vaut la valeur v en t si cl) passe de la valeur u à v (u ~ v) en t (sachant que u peut être « nil » la valeur non définie) - L'opérateur Bot est appelé opérateur de front descendant. Bot cl) vaut u à la date t si cl) passe de la valeur u à la valeur v (u ~ v) en t. Formules du langage noyau La syntaxe du langage formel de spécification des comportements redoutés selon l'invention est la suivante : - Si a est un terme, que O est un symbole de prédicat alors O(a) est une expression du langage selon l'invention - Si cl) est une expression dudit langage, a un réel non nul, b un réel, alors sont aussi des expressions de ce langage : - V[a] I - Top cl) - Bot cD - () - X[n] C (avec c purement booléenne, concept défini ci-dessous) - Si 4.1 et 4'2 sont deux expressions dudit langage, i+ un intervalle tel que i.ub i.lb 0, d un réel tel que d 0, que k E {0,1} alors sont aussi des expressions de ce langage : - (D1 Ui+ (D2 - (D1 Si+ (D2 - ~1 S(d,k) c2 10 En notation BNF le langage noyau est donné par la grammaire cD suivante: F::=cIx1(F,...,F)If(F) T:=FI(T,..., T ) IV[a]T IN;.1) ITop T IBot T IX[n]FIf(T ) B ::= O(F) 15 I(B) cl) ::= B I0(T ) I V[a] cD I X[n] B 20 I cD U;+ cD I cD Si+ cD I S(d,k) I Top 1 I Bot c I(d') Où a est un réel non nul, d un réel positif ou nul, n un entier relatif non nul. 25 Exemple de formule (qui sera écrite plus lisiblement lors de l'introduction d'opérateurs dérivés) =((N[0,4[Top (=(p,1))),1) Nous verrons plus loin que, avec le langage dérivé, cette expression peut 30 être rendue plus lisible et plus intuitive. Formules purement booléennes et termes non décalés La sous-grammaire B de cl) désigne l'ensemble des formules dites purement booléennes. Comme on peut le voir une formule de B n'est en réalité qu'une composition de prédicats, donc un prédicat. L'union des expressions des grammaires B et F forment l'ensemble des expressions que nous appellerons « non décalées ». Sémantique intuitive des formules du langage noyau : - O(a) est vraie en t si 6(t) E O.set. Par exemple prenons l'expression >a où a est le couple ((x + 1), y) ; supposons qu'à la date 10 nous ayons x(10) = 2 et que y(10) = 1. Donc en 10 l'expression >«x + 1), y) est vraie puisque ((x + 1)(10), y(10)) = (2+1, 1) = (3,1) E >.set (>.set désigne l'ensemble associé au symbole >). - L'opérateur V[a] est un opérateur de décalage (le « V » vient de l'expression anglo-saxonne « Value »). V[a~ cl) est vraie (vaut 1) en t si et seulement si cl) est vraie (vaut 1) en t+a - X[n] est un opérateur de décalage (le « X » vient de l'expression anglo-saxonne « neXt »). La formule X[n] cl) est vraie en t si la formule purement booléenne cl) est vraie selon l'instantané I(k+n) où Ik est le plus proche instantané situé avant t. - L'opérateur U;+ porte aussi sur le futur (le « U » vient de l'expression anglo-saxonne « Until »). Par exemple 4.1 U[a,b] 4'2 signifie intuitivement : « 4'2 sera vraie entre a et b et 4.1 sera partout vraie entre temps ». Plus rigoureusement la formule 4.1 U;+ .1)2 est vraie en t si et seulement s'il existe une date t' de (i+)Ot où 4'2 est vraie et que 4.1 est partout vraie dans l'intervalle [t, t'[. Son intervalle de portée, i+, possède des bornes positives ou nulles. En revanche la fermeture sur les bornes de i+ est libre. - L'opérateur S;+ porte aussi sur le passé (le « S » viens de l'expression anglo-saxonne « Since »). Par exemple 4.1 S[a,b] 4'2 signifie « .1)2 sera vraie vers le passé entre -b et -a et 4.1 sera partout vraie entre temps ». Plus rigoureusement la formule 4.1 Si+ 4'2 est vraie en t si et seulement s'il existe une date t' de (rev(i+))Ot où .1)2 est vraie et que 4.1 est partout vraie dans l'intervalle ]t', t]. Son intervalle de portée, i+, possède des bornes positives ou nulles. En revanche la fermeture sur les bornes de i+ est libre. - L'opérateur S(d,k) porte aussi sur le passé. I1S(d,k>I2 1 o signifie intuitivement : « .1)2 sera vraie vers le passé au-delà de -d et 4.1 sera partout vraie entre temps ». '131 S(d,k) 4'2 est vraie en t s'il existe une date t' au delà de t-d (t-d comprise si k = 1 et t-d non comprise si k = 0) dans le passé où 4'2 est vraie et que 4.1 est partout vraie sur ]t',t]. 15 - L'opérateur Top est appelé opérateur de front montant. Top cl) est vraie à la date t si cl) passe de faux à vraie en t. - L'opérateur Bot est appelé opérateur de front descendant. Bot cl) est vraie à la date t si cl) passe de faux à vrai en t. 20 Langage dérivé Dans le langage dérivé nous ajoutons des opérateurs qui ne sont pas fondamentaux en ce sens qu'ils ne font qu'abréger des formules pouvant s'écrire avec seulement les opérateurs fondamentaux. Par exemple la formule E; cl) n'est qu'une abréviation de ((N; cl)) > 0). L'ajout explicite de ces 25 opérateurs présente néanmoins un double intérêt : - Ergonomique : ces opérateurs supplémentaires sont plus intuitifs lors de la mise en pratique du langage, ils rendent les expressions plus facile à relire et à comprendre - Calculatoire : pour chacun nous pouvons définir un mode de calcul qui 30 sera plus efficace que le mode de calcul tiré de l'opérateur fondamental (par exemple pour E; il existe un calcul dédié plus efficace que serait celui de ((N; cl)) > 0)) Les éléments de langage additionnels sont les suivants: - Tout symbole de proposition est une expression du langage selon l'invention (p abrège la formule : =(p,1) ) - Si cl) est une expression dudit langage, i un intervalle, a un réel, k @ une symbolique de prédicat unaire sur les entiers naturels (sous-ensemble des entiers naturels), alors sont aussi des 1 o expressions de ce langage : - Ei - G; - (V'1 n(V'2 15 o ~1 v (1)2 o 4'1 I2 - 4.1!4.2:4.3 - B(e,k) - B{@}(e,k) ) 20 - Top{@}; cl) - Bot{@}; cl) La symbolique de prédicat @ peut par exemple être donnée sous les formes suivantes : 25 o =r o r o [r,q] Avec r 0 et q r (où r, q sont des entiers naturels) 30 Sémantique intuitive des éléments additionnels de langage Pour faciliter la lecture on utilise les notations usuelles z-y pour -(z,y) et zxy pour x(z,y). - Si p est un symbole de proposition, p est vraie à la date t si I.p = 1 où I est le plus proche instantané situé avant t. Ainsi p abrège la formule =(p,1) du langage noyau. - L'opérateur est la négation. -KID abrège (1 - 1)). Elle vraie à une date t si et seulement si cl) est fausse à cette date t. - L'opérateur A est appelé conjonction. La formule 4.1 A 4'2 n'est 1 o vraie à une date t que si 4.1 et 4.2 sont toutes deux vraies à cette date t. Elle abrège 4.1 x c2. - L'opérateur v est appelé disjonction. La formule est vraie à une date t si 4.1 ou 4'2 est vraie à cette date t. La formule 4.1 v .1)2 abrège ((c1 + 4.2) - (4.1 x 4.2)) du langage noyau. 15 - L'opérateur - est appelé implication. La formule 4.1 - .1)2 est fausse en t si nous avons 4.1 vraie en t et 4'2 fausse en t ; elle est vraie dans les autres cas. Elle abrège -el v .1)2 soit =((1- .1)1) + .1)2 - ((1- 4.1) x 4.2), 1) du langage noyau. - L'opérateur tripartite ? : est l'opérateur si-alors-sinon. 4.1 ? 4'2: 4'3 20 est vraie en t si 4.1 et .1)2 sont vraies en t ou bien si -4 i et .1)3 sont vraie en t. 4.1 ? .1)2 : 4'3 abrège donc (4.1 A 4'2) v (-el A 4'3). - L'opérateur E; est appelé opérateur existentiel. La formule E; cl) est vraie à une date t s'il existe au moins une date t' de l'intervalle i e t où cl) soit vraie. Ainsi elle abrège l'expression ((Ne) >0) du 25 langage noyau. Une représentation est donnée à la figure 4A, sur laquelle E; cl) est vraie en t car il existe des dates où cl) est vraie dans i e t (celles représentées par l'intervalle j). L'opérateur E; peut adresser simultanément le futur et le passé car les bornes de i, son intervalle de portée, peuvent être positives, négatives ou nulles. Cet intervalle de portée n'est pas nécessairement fermé sur ses bornes. - L'opérateur G; est appelé opérateur universel. La formule G; cl) est vraie à une date t si en toute date t' de l'intervalle iOt alors cl) est vraie en t'. Elle abrège -i(E; (-4)) soit 1-((N; (1-cl)))>O). L'opérateur G; peut adresser simultanément le futur et le passé car les bornes de i, son intervalle de portée, peuvent être positives, négatives ou nulles. Cet intervalle de portée n'est pas nécessairement fermé sur ses bornes. - L'opérateur B(e,k) porte sur le passé (le B vient de Before). Cet opérateur signifie intuitivement : « antérieurement à e». B(e,k) cl) abrège (N(o,-00,e,k) cl))>O. B(e,k) cl) est vraie en t si cl) est vraie dans (0,-oo,t+e,k). - L'opérateur B{@}(e,k) porte sur le passé. Cet opérateur signifie intuitivement : « le nombre d'intervalles antérieurs à e satisfait @». B(e,k){@} cl) abrège @(N(o,-oo,e,k) cl)). Be} (e,k) cl) est vraie en t si le nombre d'intervalles la liste de validité de cl) ayant une intersection non vide avec (0,-oo,t+e,k) satisfait @. - Enfin Top{@}; cl) et Bot{@}; cl) sont des contractions de @(N;(Top cl))) et de @(N;(Bot cl))). Ainsi Top{@}; cl) est vraie en t si le nombre de transitions à vrai de cl) dans iOt satisfait @. Ceci est illustré par exemple en figure 4B. Au final, en notation BNF, le langage complet est le suivant : r::=c1x1(F,...,F)If(F)IX[n]F T:=F1(T,..., T ) IV[a]T IN;cl) ITop T IBot T If(T ) B ::= p I, B I B A B I B v B I B- B I B? B: B 1 O(F) I(B ) ~::=B IIcl) A cl) 1cl) v.131cl) cl) 1cl) ?cl) :cl) Io( T) 1 X[n] B I V[a] cl) I B(e,k) I B{@}(e,k) cl) I Eicl) I Ge 1 cl) U;+ cl) I cl) Si, cl) 1 S(d,k) 1 Top cl) 1 Bot cl) 1 Top{@}; cl) 1 Bot{@}; cl) I(d') 15 Où c est tout symbole de constante, x tout symbole de variable, O tout symbole de prédicat, f tout symbole de fonction, p tout symbole de proposition, i un intervalle, i+ un intervalle de bornes positives ou nulles, @ une symbolique de prédicat unaire sur les entiers naturels, a tout réel 20 différent de 0, e tout réel, d tout réel positif ou nul. Exemples de formule. Avec les éléments additionnels la formule donnée en exemple pour le langage noyau peut s'écrire plus lisiblement : 25 (Top{=1 }[0,4[ P) « p ne passe à vraie qu'une seule fois sur une fenêtre ouverte de longueur 4 » (c'est une pré-condition pour que p soit de période 4) (Top (temp > 100)) - E[o,2] (Alarm > 3) « Si la variable temp franchit le seuil de 100 degrés alors une Alarme de niveau supérieure à 3 est déclenchée dans les deux secondes » Quelques autres exemples de formules du langage complet: o p1 A p2 0 P3 U[o, 12] ((-' (E[1.43,5.64] (P1 A P2 )) A (-1 E[2.43, 7.85] P2)) 0 ( Comportement redoutés spécifiés La grammaire F permet, à partir de signaux de base et de constantes, de construire des signaux plus complexes, des signaux décalés dans le temps, ou encore des n-uplets de signaux. Par exemple à partir du signal x et de la constante 1 nous pouvons construire le terme +(x,1) (que l'on écrit plus communément (x+1)). Les termes dénotent donc des valeurs. Les termes ne sont donc pas des expressions valides (valant 1) ou non valides (valant 0). La comparaison de termes, comme l'expression > (+(x,1), 2*y) (notée plus communément (x+1) > 2*y), en revanche, est une expression pour laquelle la notion de validité s'applique. En fait, seules les expressions de la grammaire cl) sont des expressions auxquelles la notion de validité s'applique. C'est pourquoi un comportement redouté spécifié au sens de l'invention sera nécessairement une expression selon la grammaire cl) donnée ci-dessus. Dans la suite de la description, une expression de la grammaire cl) sera appelée une formule. Les parenthèses sont utilisées pour désambiguïser une formule. En effet, si l'on écrit 4.1 A .1)2 U[a,b] 4'3 on ne sait s'il faut lire (4.1 A 4'2) U[a,b] 4'3 ou bien lire 4.1 A (4'2 U[a,b] C3). Or ces formules ne sont pas équivalentes, d'où l'importance des parenthèses.30 Par ailleurs, dans la suite de la description, nous pourrons nous contenter, pour certaines définitions et concepts, de les poser uniquement sur le langage noyau, sachant que l'on peut toujours s'y ramener. L'ensemble des sous-expressions d'une expression cl) (formule ou terme) est donné par la fonction SE définie de la façon suivante : - SEO) = {D} si cl) est une proposition, un signal ou une constante - SE((61, ..., an)) = {(61, ..., an)} u SE(61) u ...0 SE(an) - SE(* cl)) = {* cl)} u SEO) si * est un symbole d'opérateur, de prédicat, 1 o de fonction - SE(c1 * 4.2) = {4'1 * 4'2} u SE(c1) u SE(cl)2) si * est un des opérateurs binaires du langage (tels : A, U[a,b] ...). - SEM))) = SEO) - SE(X[n] cl)) = { X[n] cl)} u SE{(r,c)} 15 La définition de SE présente uniquement une particularité pour X[n] cl) qui possède une sous-expression « cachée » qui est le couple (r, cl)) où r est un signal de type entier (destiné à recevoir le numéro de l'instantané). 20 Exemple 1: SE( -i(=(x, 0))) = {-i(=(x, 0)) } u SE(=(x, 0)) = {-i(=(x, 0)) } u {= (x, 0) } u SE((x,0)) = {-i(=(x, 0)) , = (x, 0) } u {(x,0)} u SE(x) u SE(0) = { -i(=(x, 0)) }, =(x, 0), (x,O) } u {x} u {0} 25 = {-i(=(x, 0)), =(x, 0), (x,O), x, 0} Exemple 2: SE( E[2.43, 7.85] (P1 A(i P2))) = { E[2.43, 7.85] (P1 A(i p2)), (P1 n( i p2)), 'P2, pi , p2 l Les sous-expressions directes d'une formule sont celles placées directement sous son opérateur. Par exemple, pour -KID il s'agit de cl). Pour 4.1 U[a,b] 4'2 il s'agit de 4.1 et 4'2. Pour une formule on dira aussi sous-formules pour désigner ses sous-expressions. Hauteur d'une expression La hauteur d'une expression cl) (formule ou terme) du langage défini ci-avant 1 o est donnée par une fonction h définie de la façon inductive suivante : - h(c) = 0 lorsque cl) est une proposition, un signal ou une constante - h((61, ..., an)) = sup(h(61), ... , h(an)) +1 où (a1, ..., an) est un n-uplet de termes - h(* cl)) = h(c) + 1 si * est un symbole préfix du langage (tels E;, f, O, 15 etc) - h(cID1 * .1)2) = sup (h(c1), h(c2)) + 1 où * est un des symboles binaires du langage Exemples : h(~ E[1,2] (P1 A p2)) = h(E[1,2] (P1 A p2)) + 1 = h((p1 A P2)) + 1 + 1 = 20 (sup(h(pi),h(p2)) + 1) + 2 = sup(0,0)+1+2 = 0 + 3 = 3 h( - (n,t)(c) = c - (n,t)(x) = n(k).x où x est un signal et n(k) le plus proche instantané précédent t, c'est-à-dire que k satisfait : n(k).t t 0 tel que (n,t')(c) ~ v pour toute date t'E ]t-E,t[ et tel que (n,t")(c) = v pour toute date t"E ]t,t+E[ - (n,t)(Bot cl)) = v si il existes > 0 tel (n,t')(c) = v pour toute date t'E ]t-e,t[ et que (n,t")(c) ~ v pour toute date t"E ]t,t+e[ Bien que cela soit déductible de la sémantique du langage noyau qui vient 5 d'être donnée, nous donnons ci-dessous la sémantique de certains opérateurs dérivés : - (n,t) (, cl)) = (1 - (n,t)(c)) - (n,t)(c1 A 4'2) = (n,t)(c1) X (n,t)(c2) - (n,t)(c1 v 4,2) = (n,t)(-i (-41 A -4 2)) 10 - (n,t)(c1 .132) = (n,t)(,(c1 A 42)) - (n,t)(E; cl)) = 1 s'il existe une date t' de et telle que (n,t')(c) = 1 et (n,t)(E; cl)) = 0 sinon - (n,t)(G; cl)) = 1 si pour toute date t' de et nous avons (n,t')(c) = 1 et (n,t)(G; cl)) = 0 sinon 15 - (7L,t)(B(e,k) cl)) = 1 s'il existe une date t' de (0, -oo, t+e, k) telle que (it,t')(c) = 1, sinon (lt,t)(B(e,k).1)) = 0. La notion de liste de validité exposée plus haut était limitée aux propositions et aux signaux. Sans sortir du cadre de l'invention, cette approche peut être 20 étendue à toute expression de notre langage (les propositions et les signaux ne formant qu'une partie de ce langage). Pour cela nous avons besoin d'établir la façon dont les opérateurs du langage se traduisent en termes d'opérations sur les listes de validités. Bien que pour les termes la notion de validité ne soit pas applicable, nous attribuerons néanmoins aux termes du 25 langage des listes de validité, car elles seront nécessaires pour le calcul des listes de validité des formules exprimant les comportements redoutés. Correspondance entre éléments de langage et opérations sur les listes de validité Il a été précédemment exposé (avec l'exemple du solde bancaire) comment se constituait une liste de validité pour une variable. Comme les formules complexes sont construites à partir des variables du système et des opérateurs du langage, pour calculer les intervalles de validités des formules complexes, il est nécessaire d'établir une correspondance entre les opérateurs du langage et des opérations sur les listes de validité. Par exemple, la liste de validité de la formule 4.1 A 4.2 résulte de la combinaison (particulière à l'opérateur A) des listes de validité de 4.1 et de 4.2. Nous allons donc établir une sorte d'algèbre sur les listes de validité. Dans ce qui précède nous avons distingué termes et formules en mentionnant que les formules sont des expressions qui ont la particularité de ne prendre pour seules valeurs 0 ou 1. Leurs listes de validité seront ainsi constituées d'intervalles assignés soit de la valeur 0 ou soit de la valeur 1. A des fins d'efficacité nous ne stockerons, pour les formules, que les intervalles de valeur 1. Les intervalles de valeur 0 seront implicites (dénotés par les interstices). Dans la liste de validité d'un terme, un interstice s'interprète comme une plage temporelle où le terme n'a pas de valeur définie. C'est notamment le cas pour un terme comme Top x qui n'aura de valeur que sur des intervalles de forme [t,t] où t est une date de changement de valeur de x. A des fins d'efficacité encore, deux types de calcul vont être explicités. Le premier sera un calcul dédié aux formules purement booléennes. Le second sera un calcul valable pour n'importe quelle formule du langage. 30 Premier calcul des listes de validité (valable uniquement pour les formules purement booléennes) figure 3: Pour calculer la liste de validité des formules purement booléennes l'algorithme définit et utilise deux variables notées .val et 1.4. pour toute formule purement booléenne d). Comme dans ce cas cl) appartient à la grammaire B elle est de la forme O('F) avec e F. Nous posons alors simplement : - .val est une variable booléenne associée à cl). - c.LV est une liste d'intervalles - I.O(,F) = 1 si I. E O.set et I.O('F) = 0 sinon. La première étape, étape 20, est une étape d'initialisation des valeurs de .val et de ^1).LV. La variable .val est initialisée à faux (soit 0) et la variable c.LV est initialisée par la liste vide. L'étape qui suit, étape 21, est un état d'attente de rafraichissement de l'instantané I. Lorsque ce rafraichissement intervient l'algorithme passe à l'étape 22 où la valeur de 1.4. est testée. Si la valeur de vérité de 1.4. est à vrai (vaut 1) le procédé teste, étape 23, la valeur de .val. Si .val est à vrai alors, étape 24, le procédé prolonge le dernier intervalle de c.LV jusqu'à I.t compris (intervalle fermé sur la valeur I.t). Si la valeur .val est à faux (vaut 0) alors, étape 25, le procédé ajoute à la fin de c.LV le nouvel intervalle [I.t, I.t]. Si au contraire, à l'étape 22, 1.4. est faux (vaut 0), alors le procédé teste .val. Si .val est à vrai (vaut 1), étape 26, alors le procédé prolonge le dernier intervalle de c.LV jusqu'à I.t non compris (ouvert sur I.t) (étape 28). Si .val est à faux, alors le procédé laisse c.LV inchangée (étape 27). A la suite des étapes 24, 25, 27 et 28, le procédé affecte à .val la valeur de 1.4. (étape 29). Puis le procédé retourne à l'étape 21 d'attente de rafraichissement de I, le calcul se prolongeant tant que le procédé est maintenu en fonctionnement. En tant que tel, il n'existe pas de condition d'arrêt pour cet algorithme de calcul puisqu'il se met en attente d'un nouvel instantané. Il peut néanmoins être facilement modifié si l'indication qu'un instantané est le dernier est disponible. Dans ce cas le retour à l'étape 21 serait soumis à la condition que l'instantané soumis ne soit pas le dernier. La condition d'arrêt sera déterminée par une stratégie d'utilisation du procédé complet c'est-à-dire par une stratégie d'exploitation des listes de validité. Exemples de calculs de Exemple 1 : considérons pi v p2. Supposons un instantané I tel que I.pi = 0 et I.p2 = 1. Alors 1.(pi v p2) vaut 1 si =(l(pi + P2- pi x p2),1) est vraie soit si I(pi+P2-PiXP2)=1 soit si (I.pi + I.p2) - (I.pi x I.p2) = 1 soit si 1 - 0 = 1. Comme c'est le cas on a 1.(pi v p2) = 1 lorsque I.pi = 0 et I.p2 = 1. Exemple 2 : Considérons la formule (=(-(x,1),0)) dont la notation usuelle est ((x-1) = 0) . Supposons un instantané 1 tel que I.x = 2. Alors 1.(=(-(x,1),0)) vaut 1 si (1.(-(x,1)), 1.0) E =.set, soit si ((-(1.x,1.1), 0) E =.set soit si ((2 -1), 0) E =.set soit si (1, 0) E =.set. Comme ce n'est pas le cas alors 1.(=(-(x,1),0)) vaut 0. Second calcul des listes de validité (valable pour toute expression mais moins efficace que le premier si appliqué à une formule purement 25 booléenne) Le calcul des listes de validité des formules non purement booléennes est maintenant abordé. Contrairement aux formules purement booléennes qui peuvent être calculées simplement en considérant la valeur que leur attribue un instantané I (soit I.c) et la valeur qu'elle avait auparavant (soit c.val), 30 pour une formule non purement booléenne le calcul de sa liste de validité repose sur une composition des listes de validité de ses sous-expressions directes, composition qui est fonction de la nature de la formule. Nous allons donner ci-dessous quelques intuitions de cette composition propre à chaque opérateur. Ces intuitions ne présagent pas que le calcul est fait « en ligne » ou « hors ligne ». Cette distinction sera envisagée plus loin lorsque nous aborderons les principes de certitude, de définition, de continuation et de zone d'influence. Nous faisons l'hypothèse implicite que le calcul est fait sur une certaine plage temporelle (qui n'a pas besoin d'être précisée pour exposer les principes). Une description formelle et prenant en compte tous les aspects du procédé est en revanche donnée en Annexe 1. Cas du terme c Si c est un symbole de constante alors c.LV est (Dom"c) c'est-à-dire la liste contenant pour unique intervalle son propre domaine avec c pour attribut de 15 valeur. Cas d'un signal x L'algorithme a été donné plus haut dans le cas de l'Algorithme de calcul de la liste de validité d'une variable. Cas de V[a]cD La liste de validité de V[ap s'obtient en décalant de (-a) tous les intervalles de la liste de d). Autrement dit i e (-a) appartient à la liste de validité de V[a]l si et seulement si i appartient à la liste de d). Cas de X[n] 6 Comme vu dans la définition de SE l'expression X[n] cl) possède une sous-expression cachée qui est (r, (y). Le signal r reçoit le numéro de l'instantané (le numéro d'un instantané peut très bien être une variable). 20 25 Si i"(k,x) et j"(k+n,y) sont des intervalles de (r, a) alors on adjoint iAy dans la liste de X[n] a. Cas d'un n-uplet de termes 6,, ... , 6n Supposons que i"(s1, ..., sk), k > 0, soit un intervalle pour le k-uplet de termes 61, ... ,6k et j"sk+1 un intervalle pour le terme ak+1. Alors l'intervalle (i n j)"(s1, - - -,sk+1) est un intervalle pour le (k+1)-uplet de termes 61, ...,6k ,6k+1 Puisque nous savons calculer pour les termes de base c, x, V[a]a, X[n] et que nous savons passer du calcul d'un k-uplet à celui d'un (k+1)-uplet, par induction nous sommes donc en mesure de calculer un intervalle pour n'importe quel n-uplet de termes 61, ..., an avec n > 1. Exemple : supposons que i = [1,3]"(5.8) soit un intervalle pour (a1, 62) et que j = [2,4]"63 soit un intervalle pour 63. Alors [2,3]"(5.8, 63) est un intervalle de 15 validité du 3-uplet de terme (61, 62, 63). Cas du terme f(6). Soit i"s, un intervalle du terme a. Alors i"f(s) est un intervalle de la liste de validité du terme f(6). 20 Exemple : prenons le terme +(x, y). Supposons que ([1,3["0.5,[3,5]"1) soit la liste de validité de x et que ([1,2["0.3,[2,5]"(-2)) soit celle de y. Alors la liste de validité de (x, y) sera : ([1,2["(0.5,0.3), [2,3["(0.5,-2), [3,5]"(1,-2)) Et celle de +(x, y) sera : 25 ([1,2["(0.8), [2,3["(-1.5), [3,5]"(-1)) Cas d'une formule de type O(6). Soient i"s un intervalle du terme a. Alors i est un intervalle de la liste de validité de la formule O(a) si se O.set. Exemple : soit la formule Cas de l'opérateur La figure 5A illustre le calcul de la liste de validité de -4) connaissant celle de cl). Le principe est le suivant : deux intervalles successifs i et i+1 de cl) donnent lieu à un intervalle pour -4) qui s'insère entre i et i+1 (Voir Annexe 1 pour une description plus détaillée). Cas de l'opérateur A. La liste de validité de 4.1 A 4'2 est fonction de celles de 4.1 et de 4'2. Le principe est le suivant : si i1 est un intervalle de 4.1 et i2 un intervalle de 4'2 et que i1 n i2 0, alors i1 n i2 est un intervalle de 4.1 A 4'2 Pour générer la liste de validité complète à partir de celles de 4.1 et 4.2 nous pouvons procéder comme suit. On choisit par exemple un parcours antichronologique. Soit il le dernier intervalle de c1.LV et i2 celui de ^1)2.LV. Tant que i2 n'est pas inférieur à il adjoindre i1 n i2 et réitérer en remplaçant i2 par son prédécesseur ; si i2 est inférieur à il réitérer en remplaçant il par son prédécesseur (Voir Annexe 1 pour une description plus détaillée). On obtient ainsi un algorithme linéaire en temps (le nombre d'éléments parcourus est proportionnel à celui contenus dans les listes de 4.1 et c2). Cas de l'opérateur v. La liste de validité de 4.1vc2 est fonction de celles de 4.1 et de 4'2. Nous pourrions utiliser le calcul de -'(-e1 A -4 2). Néanmoins nous pouvons suivre une méthode plus directe en se basant sur le fait que c1vc2 est vraie si et seulement au moins l'une des listes 4.1 ou 4'2 est vraie. Tout d'abord nous faisons un choix de sens de parcours des listes de validité des listes de 4.1 et de 4'2. Nous verrons qu'il est plus judicieux de partir de la fin des listes. Nous faisons donc ce choix. Soient i1 et i2 les derniers intervalles de respectivement cID1.LV et de 4.2.LV. Nous faisons un premier choix entre il et i2 qui consiste à choisir l'intervalle qui va le plus loin dans le futur (où i « va plus loin dans le futur que » j signifie que soit nous avons i.ub > j.ub soit nous avons si i.ub = j.ub et i.0 = 1 et j.0 = 0). Si ce choix n'est pas possible car ils vont tous deux aussi loin dans le futur (c'est-à-dire i1.ub = i2.ub et i1.0 = i2.u) alors nous choisissons des deux celui qui va le plus loin dans le passé. Prenons, sans perte de généralité, le cas où i1 serait choisi selon ces critères. Nous faisons entrer i1 dans la liste de validité (D1v c2).LV de c1v .1)2 par adjonction à gauche. Ensuite nous recherchons dans les prédécesseurs de i2 (i2 compris) le premier intervalle i qui soit tel que i Cas de l'opérateur E; Pour le calcul de E; cl) nous proposons un algorithme plus efficace que celui qui consisterait à calculer (N1 > 0). Ce calcul est illustré en figure 5B. Considérons la formule E; cl). Supposons que j soit un intervalle de validité de cl). D'après la sémantique de E; cl) nous déduisons que toute date t telle que (t e i) n j ~ 0 est une date de validité de E; cl) engendrée par j. Il suit que (j.l x i.u, j.lb - i.ub, j.ub - i.lb, j.0 x i.l) est un intervalle à adjoindre à la liste de validité de E; c. Justification : considérons la borne inférieure j.lb - i.ub. Nous avons : (j.lb - i.ub) O+ i = (i.I, j.lb - i.ub + i.lb, j.lb - i.ub + i.ub, i.u) = (i.I, j.lb - i.ub + i.lb, j.lb, i.u) Or (i.l, j.lb - i.ub + i.lb, j.lb, i.u) n j ~ 0 si et seulement si i.0 = 1 et j.l = 1. D'où la borne inférieure et sa fermeture dans l'intervalle engendré (j.l x i.u, j.lb - i.ub, j.ub - i.lb, j.0 x i.l). Le même raisonnement conduit à justifier la borne supérieure et sa fermeture. Exemple : supposons que [4,9] soit dans la liste de validité de cl). Considérons la formule E[_1,3[. Alors (1x0, 4 - 3, 9 - (-1), 1x1) soit ]1,10] sera à adjoindre à la liste de validité de E[_1,3[. 1 o Cas de l'opérateur G; Considérons la formule G; cl). Supposons que j soit un intervalle de validité de cl). Alors j .J i est un intervalle à adjoindre à la liste de validité de G; c. Justification : ceci découle de la sémantique selon laquelle G; cl) est vraie en t si (i.l, i.lb + t, i.ub + t, i.u) est inclus dans j. Donc au maximum on peut avoir 15 i.ub + t = j.ub. Donc au maximum t = j.ub - i.ub et la borne supérieure est j.ub - i.ub. Maintenant la fermeture : si j.0 = 1 alors (i.l, i.lb + j.ub - i.ub, i.ub + j.ub - i.ub, i.u) = (i.l, i.lb + j.ub - i.ub, j.ub, i.u) peut-être inclus dans j quel que soit i.u. En revanche si j.0 = 0 il n'y a inclusion que lorsque i.0 = 0. Finalement il n'y a pas inclusion que lorsque j.0 = 0 et i.0 = 1. La fermeture sur la borne 20 supérieure est donc la fonction logique (-i i.u) v j.0 qui ne vaut 0 que lorsque j.0 = 0 et i.0 = 1. De façon plus concise on peut écrire cette fermeture i.0 j.0 en vertu de l'équivalence logique : ((-' a) v b) - (a b). Exemple 1 : supposons que [4,9] soit dans la liste de validité de ou cl) ?. 25 Considérons la formule G[_1,3[. Alors (1 1, 4 - (-1), 9 - 3, 01) soit [5, 6] sera à adjoindre à la liste de validité de G[_1,3[. Vérification : si l'on prend n'importe quelle date de [5, 6], par exemple 6 on voit que l'on a bien [-1,3[ O 6 = (1,6+(-1 ),6+3,O) = [5,9[ inclus dans [4,9].5 Exemple 2 : supposons que [4,7] soit dans la liste de validité de Considérons la formule GE_1,3E. Alors (1 1, 4 - (-1), 7 - 3, 01) soit [5, 4] est équivalent à o (car la borne supérieure est supérieure la borne inférieure). En effet G[_1,3[ demande la validité continue sur un intervalle de longueur 3 - (- 1) = 4 ce qui n'est pas le cas sur [4,7] qui n'est que de longueur 3. Cas de l'opérateur Top Considérons la formule Top cl). Supposons que (I,Ib,ub,u)"s soit un intervalle de validité de cl). Alors [Ib,lb]"s est à adjoindre à la liste de validité de Top cl). Cas de l'opérateur Bot Considérons la formule Bot cl). Supposons que (I,Ib,ub,u)"s soit un intervalle de validité de cl). Alors [ub,ub]"s est à adjoindre à la liste de validité de Bot cl). 15 Cas de l'opérateur Ni Considérons la formule Ni cl). On suppose que l'on calcule la liste de validité de cette formule sur un domaine D. En premier lieu la liste de validité de Ni cl) est initialisée avec l'intervalle à compteur DxO. Autrement dit, en toute date le compteur est mis à zéro. Puis on considère les intervalles de cl) les uns après 20 les autres. Supposons que j soit un intervalle de validité de cl) qui n'ait pas été encore considéré dans le calcul de N;.. Considérons les dates de l'intervalle (lxi.u, j.lb - i.ub, j.ub - i.lb, lxi.l) obtenues sur le modèle de E; c. Pour chaque date t de cet intervalle par construction iO t possède une intersection non vide avec j lequel n'avait pas été encore considéré. Donc si 25 le compteur de t était k alors il doit devenir k+1 en raison de j. Autrement dit j contribue à incrémenter de 1 le compteur de toute date de (lxi.u, j.lb - i.ub, j.ub - i.lb, lxi.l). Ceci revient donc à former l'intervalle à compteur (lxi.u, j.lb - i.ub, j.ub - i.lb, 1 xi.l)xl puis à l'adjoindre à la liste de validité de Ni cl) selon l'adjonction avec compteur (On se reportera à l'Annexe 1 pour un algorithme 30 de calcul détaillé).10 Remarque : quand i est non standard, soit de la forme (0, - oo, a,k) on adjoint des intervalles non standard de la forme (I, lb, + oo, 0). En pratique ces intervalles seront coupés par l'intervalle de définition, notion qui sera vue plus loin. Cas de l'opérateur U;+. Nous distinguons selon que OE i+ ou 0 e i+. Cas 0 1+ Rappelons que 4.1 U;+.1)2 est valide en une date t si 4'2 est vraie à une date t' 1 o de (i+)Ot et que 4.1 est vraie partout sur [t,t'[. Il résulte de ceci qu'un intervalle i1 de 4.1 et un intervalle i2 de 4'2 tels que i1] n i2 = 0 (rappel : i1] est le fermé à droite de i1) ne peuvent donner lieu à un intervalle pour 4.1 U;+ c2. En effet si i1] n i2 = 0 cela signifie qu'il existe une séparation entre i1] et i2 par conséquent que 4.1 ne peut être partout vraie à partir d'une date de i1] est 15 jusqu'à une date de i2. Donc i1] n i2 0 est une condition nécessaire pour que i1 et i2 génèrent un intervalle pour 4.1 U;+ 4'2. Considérons donc, deux intervalles i1 et i2 tels que i1] n i2 0. Appelons r cet intervalle i1] n i2. Considérons l'intervalle q = (r.lx(i+).u, r.lb - (i+).ub, r.ub - (i+),Ib, r.ux(i+),I). D'après ce que nous avons vu précédemment pour l'opérateur E;, si nous 20 choisissons une date t dans q il est clair qu'il existe une date t' de (i+)O t qui soit dans r. Comme toutes les dates de r sont aussi des dates de i2 (puisque r = i1] n i2), cela signifie qu'en t' .1)2 est vraie. Nous en déduisons que si t est choisie dans q alors il existe une date t' de (i+)O+ t où 4'2 est vraie. Choisissons maintenant t dans q n i1]. Alors la date t, en tant que date de q, 25 nous garantit comme vu ci-dessus qu'il existe une date t' de (i+)O+ t où 4'2 est vraie. Rappelons que de plus t' est aussi une date de r. Ceci implique que t' est une date de i1] (puisque r = i1] n i2). Par ailleurs en tant que date de q n i1] la date t est aussi une date de i1]. Finalement, pour synthétiser, t et t' sont toutes deux des dates de i1] et t' est dans (i+)O+ t. Comme 0 e i+ alors t O.) Cas 0 E 1+ (donc cas de : 4.1 Donc i+ est de la forme (1,0,b,k) avec k E {0,1}. Dans ce cas l'ensemble i2 est lui-même un ensemble de dates qui valident 4.1 U;+ 4'2. L'intervalle i2 doit donc aussi être adjoint à ((1 U;+ .132).LV. Mais si par ailleurs il existe i1 de (1.LV qui chevauche i2 par la gauche comme sur la figure 5D, les dates de i1 qui sont aussi dans j = (i2.lxk, i2.lb - b, i2.ub, i2.u) valident e1 Finalement s'il existe un tel i1 qui chevauche i2 par la gauche c'est donc 20 l'intervalle (i1 n j) u i2 que nous devons adjoindre au lieu de i2 seulement. Dans l'Annexe 1 un calcul précis et formalisé est donné pour le calcul de 4.1 U;+ 1)2. 25 Cas de l'opérateur S;+. Symétrique de U;+ dans le passé. Cas de l'opérateur B(e,k). La liste de validité de B(e,ke ne dépend que du premier intervalle de la liste de validité de ~. Supposons que i soit le premier intervalle de la liste de 30 validité de 1 alors B(e,ke est valide sur (i.uxk, i.ub - e, o, 0). En pratique on limitera la borne supérieure de cet intervalle suivant l'intervalle de définition, notion qui sera vue plus loin. Cas de l'opérateur S(d,k). Considérons la formule 4.1 S(d,k) 4'2 . Là encore pour que i1 de 4.1 et i2 de 4'2 produisent un intervalle pour 4.1 S(d,k) 4'2 il faut que i2 n [i1 0. Supposons que ce soit le cas. Posons j = (i.uxk, i.ub+d,00,0). Alors j n i1 est un intervalle de validité pour el S(d,k) 1 o Dans les descriptions ci-dessus un seul exemple d'intuition a été donnée pour chaque opérateur, des bases du calcul. Il existe de multiple façon de composer des listes de validité avec un résultat identique. L'essentiel est que le calcul soit conforme à la sémantique donnée pour le langage. Dans l'Annexe 1 une description précise et complète (en pseudo-code) est donnée 15 d'un mode de calcul possible pour chaque opérateur. Relation entre le procédé et le calcul de la liste de validité de la formule principale Dans ce qui précède nous avons décrit une version simple du procédé où le 20 comportement redouté se réduisait à une proposition, soit « solde appliquer le même principe à savoir : « détecter le comportement redouté c'est tester que la liste de validité de la formule qui l'exprime est non vide ». Or nous avons montré, au travers de deux types de calcul, que ce calcul peut être fait, pour n'importe quelle formule du langage. La seule contrainte à respecter est que lorsqu'on calcule la liste de validité d'une formule il faut que l'on ait traité d'abord ses sous-formules directes. Ceci n'a rien d'inhabituel : par exemple, en arithmétique élémentaire, si l'on demande de calculer a+b, il faut bien que les termes a et b soient définis et aient été calculés avant que l'on procède au calcul de a+b. Cette contrainte laisse 1 o supposer au moins deux modes de calcul pour le procédé : - Un calcul de type récursif (reposant sur un algorithme qui s'appelle lui-même) - Un calcul suivant la hauteur des formules 15 Schématiquement l'algorithme récursif est le suivant (il prend en argument une formule, nommons là cl)) : D.1 - Si cl) est formule purement booléenne, calcul de la liste de validité selon l'algorithme propre à ce type de formule. D.2 - Sinon identification de l'opérateur de la formule d), 20 D.2.1 - Appel (récursif) du présent algorithme sur les sous-expressions directes de cl) D.2.2 - Selon la nature de cl) calcul de sa liste de validité en fonction de celles de ses sous-expressions. D.3 - FIN 25 Le procédé, à chaque rafraichissement de l'instantané I, appelle cet algorithme avec comme argument la formule principale O. Selon un autre mode de réalisation, le calcul de la liste de validité fait appel à 30 un algorithme non récursif se basant sur la hauteur des formules. Schématiquement l'algorithme est le suivant (o est la formule principale) : E.1 - soit k = 0 E.2 - « tant que » k Pour le procédé cet algorithme est appelé à chaque rafraichissement de l'instantané I, sans argument. 15 D'un point de vue de l'efficacité on privilégiera le calcul reposant sur la hauteur des formules. En pratique on rangera les sous-formules de la principale co dans une liste croissante selon la fonction h (c'est-à-dire de sorte que si 4.1 et 4.2 sont deux formules consécutives de cette liste on ait soit 20 h(c1) Dans ce qui précède nous avons présenté un calcul des liste de validité sans nous préoccuper de la plage temporelle qu'il était nécessaire ou possible de calculer. Les principes du calcul rigoureux, optimisé et en ligne vont être 30 exposés ci-après. Comme il va être vu, il s'agit de conserver les résultats déjà obtenus lorsque le procédé est assuré qu'ils ne seront plus modifiés et de ne faire, à chaque nouveau rafraichissement de l'instantané, que les calculs nécessaires au prolongement de ces résultats. De sorte que le calcul peut être vu comme une suite de calculs locaux qui prolongent des résultats acquis antérieurement. Principes du calcul en ligne (définition, continuation et zone d'influence) Le procédé de calcul selon l'invention efficace, en ligne, et à mémoire bornée, des intervalles de validité repose sur des principes originaux qui vont être exposés. Ce sont les principes de certitude, de définition, de 1 o continuation et de zone d'influence. Corollaire de la notion de zone d'influence, la notion de date d'inutilité permet de doter le procédé d'un mécanisme essentiel à son fonctionnement sans limite de durée, à savoir l'élimination des intervalles devenus non pertinents du point de vue de la problématique de détection du comportement redouté. 15 Intervalle de certitude : un intervalle i est un intervalle de certitude pour l'expression cl) si pour tout encadrement n' den alors la validité de cette expression cl) selon n' et n est identique sur cet intervalle i c'est-à-dire que pour toute date t de i alors (n',t) 1= cl) si et seulement si (n,t) 1= cl). Exemple : soit le processus n composé de deux instantanés n(0) et n(1) tels que n(0).p = 1, n(0).t = 2.8 n(1 ).p = 0, n(1 ).t = 3.4 25 Alors par exemple [2.8,3] est un intervalle de certitude pour la proposition p en vertu de la définition de la sémantique des propositions. Car en effet si nous prenons n'importe quelle date t de [2.8,3], la validité de p dépend du plus proche instantané qui précède cette date t, qui est n(0) de date n(0).t = 30 2.8. Donc si nous considérons n'importe quel encadrement n' de n, la validité selon n' de p sera inchangée sur [2.8,3] 20 Intervalle de définition : l'intervalle de définition d'une formule cl) selon un processus n, noté def,t(I ), est le plus grand intervalle (au sens de l'inclusion) de l'ensemble de ses intervalles de certitude. Exemple : pour reprendre l'exemple précédent, l'intervalle de définition de p est [2.8,3.4] (soit le domaine temporel de n). Une autre manière de voir l'intervalle de définition d'une formule cl) selon un 10 processus n est de le voir comme l'intervalle où la validité de cl) est non seulement certaine mais aussi ne dépend que de n. Il est aisé de donner un sens concret à ce concept pour les propositions (et par extension aux formules purement booléennes). En effet un processus n, 15 en tant que suite finie d'instantanés, possède un premier et un dernier instantané. Appelons les n.first et n.last de dates respectives (n.first).t et (n.last).t. Il est alors clair que la validité de toute proposition et plus généralement de toute formule purement booléenne est complètement définie sur l'intervalle [(n.first).t, (n.last).t] et que sur cet intervalle la validité 20 de cette classe de formule ne dépend que de n. Pour généraliser à toutes les formules nous allons définir une fonction def,t qui associe à toute formule, relativement à un processus, son intervalle de définition. Nous pouvons poser immédiatement : 25 def,t(p) = [(n.first).t, (n.last).t] Détermination de : def,,Al c1 Selon la sémantique de l'opérateur Ni la validité de Ni cl) en une date t dépend de la validité de cl) dans l'intervalle t e i. Donc, étant donnée def,t(I ), 30 les dates où la validité de Ni cl) est définie et dépend uniquement de cl) (donc5 uniquement de n) sont les dates où t O i ç def,t(I ). Ceci est illustré par la figure 6. Selon cette figure 6, nous voyons qu'en to et t3 la validité de Ni cl) dépend de dates qui ne sont pas dans def,t(I) (celles figurées par les lignes en pointillés). Elles ne seront donc pas dans def,t(N; cl)). En revanche t1 et t2 seront dans def,t( Ni cl)). On peut voir également que t1 et t2 sont les bornes de def,t(N; cl)). 1 o Formalisons maintenant ces idées : def,t(N;cl))={t/tOicdef,t(I)} Comme t i = (i.l, i.lb + t, i.ub + t, i.u) la date maximum tmax de def,( Nid)) est telle que : i.ub + tmax = def,t(').ub, soit tmax = def,t(').ub - i.ub. Ceci signifie que la borne supérieure de def,t(N; cl)), soit (def,t(N; c)).ub est : 15 def,t(I ).ub - i.ub. Déterminons maintenant la fermeture de def,t(N; cl)) sur cette borne supérieure. Il s'agit en fait de déterminer, en fonction de i.0 et def,t(I ).0 si la date def,t(I ).ub - i.ub est ou non dans def,t( Ni cl)). 20 Cas 1 : i.0 = 1 et def,t(I ).0 = 1 Donc (def,t(I ).ub - i.ub) i est un intervalle de la forme suivante (le X remplace les valeurs non pertinentes pour le raisonnement) : (X, X, def,t(I ).ub - i.ub + i.ub, i.u) 25 soit (X, X, def,t(I ).ub, 1) Comme def,t(I) est aussi de la forme (X, X, def,t(I ).ub, 1), cela signifie que l'inclusion est assurée sur la borne supérieure, donc que def,t(N; c).0 = 1 lorsque i.0 = 1 et def,t(I ).0 = 1. 30 Les autres cas sont résumés par le tableau suivant : i.0 def,t(I ).0 def,t(N; ~).0 (- i.u) v def,t(I ).0 1 1 1 (-i1)v1 =1 1 0 0 (-il)vO=O 0 1 1 (-i0)v1 =1 0 0 1 (-i0)v0=1 D'après ce tableau il ressort que : def,t( Ni ~).0 = (- i.u) v def,t(I ).0 = i.0 def,t(I ).0 (Rappel : est l'implication logique donnée dans les notations 10 préliminaires) Et de la même manière: def,t( Ni c),I = (- i.l) v = 15 Finalement nous avons : def,t( Ni cl)) = (i.l def,t(I ),Ib - i.lb, def,t(I ).ub - i.ub, i.0 def,t(I ).u) Avec les notations introduites nous pouvons écrire plus simplement : def,t(N; cl)) = def,t(I) .J i Exemple : posons def,t(I) = [2,6[. Alors : def'( cl)) = ((-i 1) v 1, 2-(-0.5), 6 - 1, (-1 1) v 0) =(1,2.5,5,0) = [2.5,5[ 20 Détermination de : defu(Bot cl)) et de def (Toi .1)1 Sachant qu'un processus croît à droite, l'intervalle de définition d'une formule croît lui aussi à droite. La valeur de Top cl) ou de Bot cl) en [def,t( cl)).ub, def,t( c).ub] n'est de fait pas certaine. Par exemple, en supposant que cl) soit vraie sur l'intervalle (I, lb, def,t( c).ub, def,t( c).u) et en supposant qu'un nouvel instantané I arrive déterminant que (selon le processus p.l) cl) devient fausse (ou prend une nouvelle valeur) sur (1- def,t( c).u, def,t( c).ub, ub, u), dans ce cas Bot cl) est vraie en [def,t( c).ub, def,t( c).ub] ce qui ne pouvait être déterminé en def,t( c).ub. De la même manière, on montre que la valeur de Top cl) n'est pas certaine en [def,t( c).ub, def,t( c).ub], d'où def,t(Bot cl)) = def,t(Top cl))= def,t( c)[. Détermination de : defe_.-, .1)1 La figure 5F permet de soutenir l'idée de son calcul. Sur cette figure le dernier instantané, disons Ik, attribue la valeur 16 à cl). D'après la sémantique de X[n] la validité de X[n] cl) (avec n = 2) peut être déterminée jusqu'à I(k_1).t (ouvert) soit jusqu'à I(k _ (n _1».t ouvert. Quand n est négatif, par exemple n = -1, puisque cl) est définie à partir de n(0) il suit que X[n] cl) est définie à partir de n(1) (soit n(-n)) puisque la liste de validité de X[1] cl) s'obtient en décalant une fois à droite les valeurs des intervalles. La généralisation de def,t à toutes les expressions est donnée par la définition suivante : - def,t((c1, ... , cn)) = def,t(I 1) n ... n def,t(I n) où (e1, ... , 4'n) est un n-uplet 25 de termes - def,t(I) = [(n.first).t, (n.last).t] si cl) est purement booléenne ou bien un terme non décalé (c est une expression de F ou de B) - def,t(V[a] cl)) = def,t(I) O (-a) - def,t(X[n] cl)) = [(n.first).t, (n.(Iast-(n-1))).t [ si n > 0 où last est l'indice du dernier instantané de n - def,,(X[n] cl)) = [n(-n).t, (n.last).t] si n Nous avons en outre n.first.t et n.last.t et pour chaque sous-expressions de forme X[n] cl) un nombre fini de dates. Ces dernières peuvent être mémorisées dans une liste de validité (c'est pourquoi X[n]cl) possède une sous-expression cachée qui est le couple (r,()). Sur le plan opérationnel le procédé n'aura donc pas besoin de stocker le processus n mais seulement un nombre fini de dates relatives à n. Algorithme de calcul de l'intervalle de définition A chaque formule est associée un nouvel attribut de type intervalle. Pour la 25 formule cl) cet intervalle est noté (.def. A l'initialisation du procédé, (.def est initialisé à l'intervalle vide (dénoté par nil ou 0). Calcul de l'intervalle de définition basé sur la fonction clef, : 30 Pour chaque rafraichissement de l'instantané I (dont l'indice est k): F1) Cas de base : a. Si cl) est une proposition, un terme non décalé ou une formule purement booléenne cl).def devient [n.first.t, I.t] b. Si cl) est de la forme X[n] Par hypothèse (r, IF) est une sous- expression non décalée de X[n] dont l'intervalle de définition est donc [n.first.t, I.t]. On peut donc considérer établie la liste de validité de (r, IF) sur [n.first.t, I.t]. i. Si n >0 il suit que (X[n] ,F).def = [tt(0).t, j.lb[ où j"(k-(n-l),$) est un intervalle de la liste de validité de (r, IF) ii. Si n Autre mode de calcul de l'intervalle de définition : par offset. Selon un autre mode de réalisation (plus efficace) on pourra pré-calculer l'intervalle de définition en utilisant une logique d'offset par rapport à n.first.t et n.last.t en utilisant des variantes la définition de clef,. Néanmoins ce mode de calcul n'est possible complètement que s'il n'existe aucune occurrence de l'opérateur X[n] dans les sous-expressions. Pour chaque formule cl) il s'agit de pré-calculer un quadruplet noté 4..8 de la même forme qu'un intervalle (ainsi nous utiliserons les notations propres aux intervalles pour cet attribut), de telle sorte qu'ensuite, lors du fonctionnement, on ait toujours: def,t (cl)) = n.first.t + c.b.lb, n.last.t + Si cl) est purement booléenne ou bien un terme non décalé, ce quadruplet est (1,0,0,1). En effet (1, n.first.t + 0, n.last.t + 0,1) = [n.first.t, n.last.t] = clef, (cl)). Pour calculer c.8 dans le cas général nous avons besoins d'introduire des 30 intersections particulières sur les intervalles. Ce sont n, et n, n'agit que les bornes supérieures tandis que (?, ?,ub2, u2) = ( ?, ?,ub,u) où : - ub = inf(ubi,ub2) - u = u1 si ub1 1 0 (l ,Ib1,?,?) Exemple : calculons 4..8 pour c = (p A E[1,2] q) : p.8 = (1,0,0,1) = [0,0] q.8 = [0,0] E[1,2] q = def,t(q) .J [1,2] = [0,0] .J [1,2] = [-1,-2] ?, ?) = [0,0] Remarque : ce mode de calcul anticipé nous permet notamment de pré-calculer les deux fermetures de l'intervalle de définition. Ces modes de réalisation du calcul de cl).def étant posés nous revenons 15 maintenant au principe de continuation que nous redéfinissons à partir du concept d'intervalle de définition. Principe de continuation Du principe de définition précédemment développé, découle le principe de 20 continuation qui gouverne les algorithmes de calcul des listes de validité de proche en proche. Supposons que la liste de validité d'une formule cl) ait déjà été établie selon un processus n sur son intervalle de définition def,t(I ). Par définition ceci assure que la liste de validité de cl) sur def,t(I) ne peut être 25 modifiée par la suite. La validité de cl) sur def,t(I) est donc un résultat acquis qui ne doit plus être recalculé par la suite. Si donc arrive un nouvel instantané I qui prolonge n en le processus n - I le calcul des intervalles pour cl) ne doit porter que sur l'intervalle def,t.1 (c) \ def,t(I) qui par définition de la fonction de définition représente la plus grande portion certaine mais non 30 encore calculée du domaine de définition de cl) selon n - 1 Pour toute formule cl) cet intervalle sera stocké dans une variable de type intervalle attribuée à cl) que l'on notera c.w et que l'on nommera fenêtre de continuation de d). La fenêtre de continuation c.w de cl) est ainsi une zone de certitude, qui n'empiète pas sur des zones déjà calculés, et qui au surplus ne contient que des dates qui dépendent du nouveau processus n - I prolongement de n. Sur le plan calculatoire c.w est la partie de l'intervalle de définition qui excède ce qu'il était lors de l'instantané précédent. Algorithme de calcul de la continuation Lors du rafraichissement de la structure mémorisant l'instantané pour chaque formule cl) l'actualisation de c.w se fait avant l'actualisation de ~.def et 15 répond donc aux étapes suivantes : - c.w = def,t(I) \ ~.def - ~.def = def,t(I ) Exemple : Evolution des fenêtres de continuation avec pour principale E[o,l[ p 20 suivant un processus dont les premiers instantanés ont pour dates 0,1,2,3. 0 1 2 3 p.w [0,0] \ 0 = [0,0] [0,1] \ [0,0] = ]0,1] [0,2] \ [0,1] = ]1,2] [0,3] \ [0,2] = ]2,3] (E[o,l[ p).w (1 X1,0-0,0- (1 X1,0-0,1- 1,0-1) \ 0 1,0-1) \ 0 (1-1,0-0,2- [0,2]\[0,1 ] = (1,0,-1,1) \ 0 = (1,0,0,1) \ 0 1,0-1) \ [0,0] =0\0 =[0,0]\0 =[0,1]\[0,0] =]1,2] = 0 _ [0,0] = ]0,1 ] En l'absence d'expression de la forme X[ne., le mode de calcul précédent peut aussi être complété, à des fins d'optimisation, par un second calcul plus rapide, dès lors que c.w est non vide. En effet on peut facilement montrer que si c.w,t est la fenêtre de continuation de cl) calculée pour le processus n, alors la fenêtre de continuation c.w(,t.;) de cl) calculée pour le prolongement n-Ideitest: (1- (c.w,t).u, (cl).w,c).ub + A, (c.w,t).u) où A = (I.t - n.last.t). En effet les fenêtres de continuation sont adjacentes, donc la borne 1 o supérieure devient la borne inférieure à l'instantané suivant (de fermeture inversée). Et la borne supérieure se voit augmentée de l'écart entre le nouvel instantané et le précédent. Selon ce mode de calcul les étapes sont alors : Si c.w est vide : - c.w = def,t(I) \ cl).def 15 - cl).def = def,t(I ) Si ,F.w n'est pas vide : - Poser k = cl).w - Puis poser c.w = (1 - k.u, k.ub, k.ub + A, k.u) 20 De sorte qu'à partir d'un certain stade, selon ce mode de calcul, il n'est plus nécessaire d'utiliser la fonction clef, mais simplement l'écart entre A la date courante et la date précédente. Notion de zone d'influence 25 Cette notion intervient dans l'objet de l'invention, à deux titres : - Elle définit, pour une formule cl), quels intervalles des sous-formules de cl) ont une influence sur la fenêtre de continuation c.w de cl) définie précédemment, - Réciproquement, elle définit, pour une formule cl), quels intervalles des sous-formules de cl) n'ont plus d'influence que sur la zone déjà certaine de - Ceci permet donc : o D'optimiser le calcul en ligne des intervalles de validité, en ne ciblant que les intervalles qui influent sur la fenêtre de continuation. o De manière duale, ceci permettra de définir les intervalles qui ne peuvent plus avoir d'influence sur les fenêtres de continuation, et donc d'éliminer ces intervalles. Analysons la zone d'influence pour la formule E1 . La figure 7 en est une illustration. Considérons la fenêtre de continuation (E; c).w de E; cl). La validité en t (E; c).w dépend des dates iO+t de cl). En d'autres termes les dates qui influences la validité de (E; cl)) sur (E; c).w sont données par l'union des intervalles iO+t pour t (E; ^).w. Or cette union n'est autre que : ((E; cl)).w.l x i.l, (E; cl)).w.lb + i.lb, (E; cl)).w.ub + i.ub, (E; cl)).w.0 x i.u). Ainsi, tout intervalle de cl) ayant une intersection non vide avec cet intervalle influence le calcul de E; cl) sur E; c.w. Considérons maintenant le calcul de Bot cl) sur (Bot c).w. Supposons que c.LV contienne un intervalle i jouxtant (Bot c).w à gauche. Alors, bien que d'intersection vide avec (Bot c).w, il influence la validité de (Bot d)) sur (Bot c).w puisque précisément (Bot cl)) est vrai en [w.lb,w.lb]. Dans ce cas la condition pour qu'un intervalle i de cl) ait une influence sur le calcul de (Bot d)) est que i] (fermeture à droite de i) ait une intersection non vide avec (Bot c).w. Ces idées peuvent être synthétisées sous la forme d'une fonction qui admet en arguments deux formules et qui renvoie un intervalle. Si kif est une formule sous-formule directe de d), ZI('F,^I)) est la plage temporelle de la liste 3o de validité de à considérer dans le calcul de la continuation de cl). Par plage temporelle nous entendons tout simplement un intervalle. Finalement nous dirons qu'un intervalle i de la liste de validité de a une influence sur la fenêtre de continuation de cl) si sa fermeture à droite i] (pour tenir compte de la spécificité de Bot) à une intersection non vide avec ZI(,F,c). Conformément à ces analyses pour Eic nous aurons donc : ZI(cl),Ei.1))=((Ei c).w.l x i.l, (Ei cl)).w.lb + i.lb, (Ei cl)).w.ub + i.ub, (Ei cl)).w.0 x i.u). Pour simplifier l'écriture nous noterons : ZI(cl),Eic) = (w.lxi.l, w.lb + i.lb, w.ub + i.ub, w.0 x i.u) où w dénote la fenêtre 10 de l'argument gauche de la fonction ZI, soit Eic ici. Définition de la fonction ZI : - Zl(ai , (61,..., an )) = w avec ai e {61,..., an l l - ZI(a, f(6)) = w - Zl(a, 0(6)) = w 15 - ZI(a, V[a] a) = w 0+ a - ZI(~, cl)) = w avec * parmi Top, Bot - ZI(c,Nic) = (w.lxi.l, w.lb + i.lb, w.ub + i.ub, w.uxi.u) - ZI(cl)1, (4.1 Ui+c2)) = (1, w.lb + (i+),Ib, w.ub + (i+).ub, 1) - ZI(~2, (4.1 Ui+c2)) = (w.Ix(i+),I, w.lb + (i+),Ib, w.ub + (i+).ub, w.ux(i+).u) 20 - ZI(cl)1, (4.1 Si+c2)) = (1, w.lb - (i+).ub, w.ub - (i+),Ib, 1) - ZI(~2, (4.1 Si+c2)) = (w.Ix(i+).u, w.lb - (i+).ub, w.ub - (i+),Ib, w.ux(i+),I) - Zl(c1, (4.1 S(d,k) c2 )) = (1, w.lb - d, w.ub - d, 1) - ZI(c2, (4'1 S(d,k) 4'2 )) = (w.lxk, w.lb - d, w.ub - d, w.uxk) - ZI(~, B(e,ke) = (w.lxk, w.lb - e, w.ub - e, w.uxk) 25 Remarque 1 : en réalité les zones ZI(cl)1, (4.1 Ui+ 4.2)) et ZI(cl)1, (4.1 Si+ c2)) ne sont pas vraiment utiles, comme l'atteste, pour les opérateurs Ui+ et Si+, les exemples de réalisation du calcul de la continuation donnés en Annexe 1. De même cette notion n'est pas utile pour le calcul de X[n] Calcul en ligne, par continuation, des listes de validité Le principe de la continuation en ligne est le suivant. Pour chaque formule le procédé ne produit de nouveaux intervalles que sur sa fenêtre propre de continuation. Ces nouveaux intervalles sont calculés à partir des listes de validité des sous-formules, mais en ne considérant que les intervalles dont l'intersection est non vide avec la zone d'influence calculée au moyen de la fonction ZI. Ces restrictions étant faites, le calcul proprement dit est alors réalisé selon les principes du calcul hors ligne (ainsi que décrit dans la 1 o section "Correspondance entre opérateurs logiques et opérations sur les listes de validité"). Pour synthétiser : le calcul en ligne est une succession de calculs hors ligne locaux restreints pour chaque formule à sa fenêtre de continuation propre. Remarque : pour que ce calcul soit correct il est nécessaire que, pour toute 15 formule, quelle que soit la zone d'influence qui lui est attribuée, celle-ci soit incluse dans sa zone de certitude propre, comme cela est illustré figure 7 (la zone d'influence pour cl) est bien dans sa zone de certitude). Or cela est toujours le cas. Ceci se démontre à partir des définitions des fonctions clef, et ZI. 20 Le calcul par continuation peut là encore être facilement illustré pour E1 . Il s'agit de ne considérer que les intervalles de la liste de validité de cl) situés dans la zone d'influence calculée pour E1 . Etant donné que ces intervalles ont plus de chance d'être à la fin de la liste de validité de cl) l'algorithme 25 procède par marche arrière. Il remonte la liste de validité de cl) à partir de la fin jusqu'à déterminer le dernier et le premier intervalle ayant une intersection non vide avec la zone d'influence. Ceci définit une sous liste de la liste de validité de cl) qui est exploitée selon l'algorithme hors ligne décrit plus haut pour le calcul de nouveaux intervalles de la liste de validité de E1 . Pour 30 chaque production nous calculons son intersection avec la fenêtre de continuation Ee.w de E1 . Si cette intersection n'est pas vide elle est adjointe à gauche dans une liste temporaire. Puis quand tous les intervalles de la zone d'influence ont été parcourus, la liste temporaire est raccordée à la droite de (E; c).LV (Voir l'Annexe 1 pour un calcul détaillé de E4). Le principe de continuation présente néanmoins des particularités pour les opérateurs B(e,k) et S(d,k). Pour une formule de type B(e,k) cl) il suffit que cl) soit vraie une seule fois à une date t pour que B(e,k) cl) soit vraie sur (k,t-e,00,0). Le procédé peut donc être simplifié. Dès que cl) est vraie, c'est-à-dire ^1).LV possède un premier i, on créé l'intervalle (i.lxk, i.lb - e, ((B(e,k).1)).w).ub, ((B(e,k) c).w).u) que l'on ajoute à la liste de validité vide de (B(e,k) cl); ensuite la borne supérieure de cet unique intervalle est réajustée à la borne supérieure de (B(e,k) .1)).w à chaque rafraichissement, sans se préoccuper de la valeur de cl). Pour S(d,k), d'après la sémantique de cet opérateur, le procédé doit examiner la valeur de vérité de 4'2 arbitrairement loin dans le passé et donc aussi celle de 4.1. Mais cette approche obligerait à conserver en mémoire tous les intervalles de 4'2 et de 4.1. De sorte que la mémoire requise par le moniteur pourrait croitre indéfiniment. Or un des objectifs principaux de la présente invention est que la mémoire requise par le moniteur soit bornée. En réalité l'information que 4'2 a été vraie est conservée dans la liste de validité de 4.1 S(d,k) 4'2. En effet, considérant le calcul de 4.1 S(d,k) 4'2 sur sa fenêtre de continuation, si le dernier intervalle de la liste de validité de 4.1 S(d,k) .1)2 jouxte (4.1 S(d,k) '132).w alors cela signifie nécessairement qu'il a existé dans la ou les fenêtre(s) précédente(s) de continuation, un intervalle i de 4.1 ayant intersecté un intervalle de 4'2 dans le passé et qui se prolongeait continument de sorte à couvrir chaque fois ces fenêtres de continuation. La mémoire que 4.2 a été vraie et que 4.1 l'est continument depuis est donc contenue dans le rapport topologique du dernier intervalle de la liste de validité de 4.1 S(d,k) 4'2 avec 4.1 S(d,k) 4'2.w : ils sont adjacents. C'est pourquoi nous serons en mesure d'éliminer les intervalles de 4'2 et de maintenir une mémoire bornée. Ceci sera vu plus loin avec la notion de date d'inutilité. Pour synthétiser ce qui a été vu précédemment : - Grâce à la fonction def,t nous sommes en mesure de délimiter, pour chaque formule : o une plage temporelle où la validité est certaine o une plage temporelle jouxtant la plage certaine, appelée fenêtre de continuation, qui limite la plage de calcul à effectuer chaque fois que l'instantané est rafraichi - Grâce à la fonction ZI, nous sommes en mesure, quand nous effectuons le calcul de nouveaux intervalles de validité sur la fenêtre de la continuation, de restreindre, au sein des listes de validité des sous-formules, les intervalles à prendre en compte pour ce calcul. Elimination des intervalles inutiles (limites d'inutilité et dates d'inutilité) Il a été exposé ci-dessus comment calculer la liste de validité de la formule principale. Ce calcul repose sur le calcul préalable des listes de validité de toutes ses sous-formules. Ce calcul sur les sous-formules apparaît donc comme un moyen nécessaire au procédé mais non comme une fin en soi puisque seule la liste de validité de la formule principale est déterminante pour le procédé (car c'est la non vacuité de cette liste qui témoigne de l'occurrence du comportement redouté). Nous avons également la valeur d'une expression qui peut être déterminée de façon certaine jusqu'à une certaine limite donnée par la borne supérieure de son intervalle de définition. Supposons que le procédé ait terminé les calculs des listes de validité et soit attente d'un nouvel instantané. Supposons que la liste c.LV de la formule principale c soit toujours vide ou bien que les intervalles calculés aient déjà été exploités (pour l'écriture d'un rapport ou l'émission d'un signal). Il est donc clair que les intervalles des listes de validité des sous-expressions de c qui n'ont d'influence que sur 1.def ne pourront plus contribuer à générer d'autres intervalles à exploiter pour c sur 1.def car sur 1.def la valeur de c est désormais certaine (de par la définition de (P.def). Ces intervalles sont donc devenus inutiles vis-à-vis de la problématique d'ensemble que est de déterminer si c est vraie à un moment donné et d'exploiter cette information. Nous pouvons donc les éliminer de la mémoire de la machine qui réalise le procédé. C'est ce mécanisme qui permet notamment de garantir que la ressource mémoire requise par le moniteur est bornée assurant de ce fait le fonctionnement sans limite de durée du moniteur généré par le procédé. Pour connaître exactement les intervalles à éliminer dans les sous-expressions de la principale, il faut être capable de déterminer, pour chacune d'elle, en deçà de quelle limite les intervalles sont devenus inutiles. Nous allons donc établir, pour chaque sous-expression `if de la formule principale 0, un couple de la forme (ub,u) de 9Zx{0,1}, appelé limite d'inutilité relative de kif et notée .rel_li, de telle sorte qu'on puisse éliminer, sans nuire à la détection du comportement redouté, tout intervalle i de la liste de validité de kif s'il est tel que (i.ub, i.u) ((P.def.ub + ub, u) où t est le prédicat défini ainsi : (ubi, u1) (ub2, u2) si et seulement si ub1 Conformément à ce que nous avons dit précédemment pour la formule principale 1), 1.abs_li = (1.def.ub, (P.def.u). Ceci implique donc que ~.rel_li = (0, c.def.u). Le cas de la conjonction est particulièrement intuitif (Figure 8). Dans cette figure considérons les intervalles de 4.1 et de 4'2. D'après leurs positions ils ne peuvent contribuer à former des intervalles de validité pour (c1 A 4.2) sur (c1 n 4.2).def. Désormais ils sont donc inutiles pour décider de la validité de (c1 A .1)2). Il en serait de même de tout autre intervalle antérieur à la limite supérieure de (c1 n 4.2).def. Autrement dit, si (c1 n 4.2).abs_Ii est la limite d'inutilité absolue de (c1 A 4.2) alors la limite d'inutilité absolue de 4.1 et de 4'2 est aussi (c1 n 4.2).abs_Ii. Cependant, si (c1 A .1)2) n'est pas la formule principale, il se peut que 4.1 et 4'2 soient aussi sous-formules d'autres formules. Il se peut donc que d'autres formules leurs imposent une limite d'inutilité antérieure à (c1 n 4.2).abs_Ii. Ainsi, ce qui peut être affirmé à partir de (c1 A .1)2) et de sa limite d'inutilité (c1 n 4.2).abs_Ii est que les limites d'inutilité de 4.1 et de 4'2 doivent être antérieures ou égales à (c1 n 4.2).abs_Ii. Une généralisation de ceci à toutes les formules du langage est explicitée ci-après. Pour généraliser ce principe à toutes les expressions du langage, nous définissons un système de contraintes sur fonction appelée LI, qui doivent toutes être satisfaites pour que cette fonction LI soit une fonction d'inutilité exploitable par le procédé. Cette définition fait appelle au prédicat t= entre deux limites. On a (ubi, u1) t= (ub2, u2) si et seulement si : - ub1 Cette fonction d'inutilité prend en argument une formule en supposée être 30 une sous-expression d'une formule principale c, et renvoi une limite relative LI(cl)n) de la forme (ubn, un), de telle sorte que la limite absolue d'inutilité de en soit ((P.def.ub + ubn, un). LI nous permet de calculer un offset par rapport à la limite d'inutilité de la principale. Etant donnée une formule principale 1 et l'ensemble {4.1, ..., cn} de ses sous-expressions une fonction LI de {4.1, ..., cn, cl)} - (9Zx{0,1}) est une fonction d'inutilité si elle satisfait des contraintes de la forme LI(,F) t= LI(c) où et cl) sont toutes les deux des sous-expressions de la principale (P et où est une sous-expression directe de cl). Ces contraintes sont les suivantes - LI((P) = (0, u) où u est la fermeture de l'intervalle de définition de 1. Et pour i,j e [1,n] - LI(ci) t= LI(* c;) où * est parmi Top, Bot - LI(ci) t= LI((c1 ,..., cn)) où (4.1, ... , cn) est n-uplet de termes - LI(ci) t= LI(* c;) où * est un symbole de fonction ou de prédicat 15 - LI(cl)i) /_ ((LI(V[a] `hi)).ub + a, (LI(V[a] `hi)).u) - LI(ci) /= ((LI(Nk clD;)).ub + k.lb, k.l (LI(Nk lD;)).u) ^ Ll(ci) /= ((Le.; U;+ ci)).ub + (i+),Ib, (i+).l (LI(c; U;+ ci)).u) ^ Ll(ci) ^= ((Le.; Ui+ `lDi)).ub + (i+),Ib, (i+).l (LI(c; U;+ `l))).u) ^ Ll(ci) ^= ((Le.; Si+ `lDi).ub) - (i+).ub, (i+).0 (LI(c; S;+ ci).u) ) 20 - Le.i) /= ((Le.; S;+ ci).ub) - (i+).ub, (i+).0 (LI(c; S;+ ci).u) ) - Ll(ci) ^= ((Le.; S(d,k) `lDi)).ub - d, k LI(c; S(d,k) 4i).u) - Ll(ci) ^= ((Le.; S(d,k) `lDi)).ub - d, k LI(c; S(d,k) 4i).u) - LI(cl)i) /_ (LI(B(e,k) c;).ub - e, k LI(B(e,k) ci).u) - LI(r,^;) t= (j.lb, z) où j et z sont tels que les conditions suivantes sont 25 réunies: - iA(m, x) et j"(m+n+1, y) sont des éléments de (r,^;).LV - LI (X[e]ti) E i - z=0sie>Oetz=1 sie Exemple : Supposons que l'ensemble de contraintes qui pèsent sur l'expression E[1,2[ p soient : LI(E[1,2[ p) ^_ (10,0). LI(E[1,2[ p) -_ (9,1). On pourra choisir : (E[1,2[ p).rel_li = (9,1) soit la plus grande limite permise par la contrainte la plus forte. Par ailleurs la fonction LI devra donc aussi satisfaire cette contrainte : Ll(p) t= (9+1, 1 1) soit Ll(p) t= (10,1). Remarque : pour une expression considérée le choix de .rel_li qui élimine le plus grand nombre d'intervalles possibles est celui qui attribue à .rel_li la limite de la contrainte la plus forte. Remarque : si l'opérateur X[n] n'est pas présent dans les sous-expressions la limite d'inutilité peut être pré-calculée à l'avance et une fois pour toute. En effet pour tous les autres opérateurs la définition de LI ne réfère qu'aux valeurs de leurs intervalles de portée. A contrario la définition de LI impliquant X[n] réfère à une liste de validité. Si cet opérateur est présent, comme les contraintes qu'il impose varient en fonction du processus il faut donc refaire le calcul de LI à chaque rafraichissement (du moins pour les sous-expressions de X[n]). Un mode de calcul possible de la limite d'inutilité relative Ci-dessous nous présentons un mode de calcul possible de la limite relative d'inutilité de chaque sous-formule de la formule principale. 1. Pour chaque sous-formule de la principale c (y compris (P elle-même) créer une variable de type limite .rel_li et lui assigner la limite symbolique (.0,0) ((oo,0) est telle que z t= (.0,0) est toujours vraie pour une limite z standard) 2. Assigner (0, (P.8.u) à c.rel_li 3. Appel de calcul_li(1, (P.rel_li) où calcul_rel_li est l'algorithme récursif présenté ci-dessous. calcul_rel_di(~,lim) Dl - Si lim /= cl).rel li alors cl).rel li = lim D2 - Pour chaque sous-formule c; de cl) calculer sa limite relative lim; en appliquant la définition de la fonction LI et appeler calcul_rel_de;,lim;) Etant donné ce mode de calcul, pour toute sous-formule de la formule principale 1), il est possible de calculer sa limite absolue d'inutilité propre, 1 o notée '.abs li .abs_li = (c.abs_li.ub +.rel_li.ub,.rel_li.u) Remarque : la date d'inutilité de la demande de brevet W02010/026150 est une version dégradée de la limite d'inutilité. La date d'inutilité s'obtient en ne 15 gardant de la limite que la valeur, c'est-à-dire en ignorant la fermeture associée. D'où que, dans cette demande, l'élimination consistait à éliminer les intervalles strictement inférieurs à cette date. Dans ce cas dégradé la date d'inutilité d'une formule est noté '.abs_di et elle vaut ('.abs_li).ub. 20 Le mécanisme d'élimination des intervalles inutiles qui vient d'être décrit peut parfaitement être combiné au mécanisme de calcul par continuation décrit plus haut. Il sera appelé après achèvement du calcul de la continuation. Nous obtenons ainsi un procédé qui non seulement ne fait pas de calculs redondants mais aussi élimine les intervalles inutiles au fur et à mesure. 25 Algorithme général du procédé - définir des variables caractéristiques du système à surveiller {xi, Xm}, - définir un certain nombre de propositions {pi, ..., Pli} sur ces variables, - allouer en mémoire du détecteur un espace suffisant pour mémoriser un instantané relatif à ces propositions et à ces variables c'est-à-dire allouer pour le temps une variable réelle notée I.t, pour chaque proposition p une variable I.p et pour chaque variable de signal x une variable I.x - allouer les variables réelles, n.first.t et n.Iast.t pour stocker la date du premier et du dernier instantané - définir une formule principale 0, - pour chaque sous-expression kif de c (y compris (P elle-même), créer une variable notée de type liste d'intervalles, et l'initialiser à vide, - pour toute sous-formule kif de c (y compris (P elle-même) créer une variable booléenne .val, et l'initialiser à 0, - pour chaque sous-expression kif de c (y compris (P elle-même) créer une variable notée 'F.w de type intervalle, appelée fenêtre de continuation de `if et l'initialiser à vide - pour chaque sous-expression kif de c (y compris (P elle-même) créer une variable notée '.def de type intervalle, appelée intervalle de définition de kif et l'initialiser à vide - de façon régulière ou périodique faire l'acquisition de la valeur des variables caractéristiques du système observé et de la date courante et rafraîchir l'instantané I en fonction de cette acquisition, - Au premier rafraichissement de l'instantané I assigner I.t à n.first.t - pour chaque rafraichissement de l'instantané (y compris le premier), assigner I.t à n.Iast.t, et pour chaque sous-expression kif de c (y compris c elle-même), et selon un ordre qui soit tel que toute formule soit traitée après ses sous-expressions directes, o Actualiser sa variable '.def et sa fenêtre de continuation 'F.w selon les étapes : ^.w = def'(,F) \ '.def ^ '.def = def,t(,F) o effectuer le calcul de la continuation c'est-à-dire calculer de nouveaux intervalles de validité pour sur sa fenêtre de continuation 'F.w (en exploitant éventuellement ZI pour limiter le parcours des listes de validité des sous-formules aux plages temporelles pertinentes) o exploiter les informations contenues dans la liste de validité de la formule principale c et émettre un signal associé. o De façon optionnelle (pour limiter la consommation mémoire) calculer '.abs_Ii et éliminer de 'F.LV les intervalles i tels que i t.abs Ii o Attendre un nouveau rafraichissement de l'instantané Méthodologie générale d'utilisation du procédé 15 Le procédé permet de détecter l'occurrence d'un comportement redouté exprimé dans son langage d'entrée tel que détaillé ci-avant. Pour exprimer un comportement redouté deux approches sont possibles. - Soit l'utilisateur exprime directement un comportement cl) redouté. - Soit au contraire il exprime d'abord une propriété kif attendue du 20 système (un invariant qui doit être vrai tout le temps) et dans ce cas le comportement redouté à analyser sera 1 = ~. Dans l'exemple qui suit immédiatement nous optons pour la seconde approche qui consiste à exprimer d'abord une propriété attendue. 25 Analyse simultanée de plusieurs principales Le procédé peut être directement étendu pour analyser simultanément et en parallèle plusieurs formules principales (P,, ..., (Pn. Tout se passe comme s'il s'agissait d'analyser une formule virtuelle constituée de l'ensemble { (P1, ..., 30 ~n } de ces formules. L'ensemble des sous-expressions de cet ensemble est 10 naturellement l'union des sous-expressions de chacune des principales. La hauteur de cet ensemble est la hauteur du plus grand élément de {h((P1), ..., h((Pn)}. Ainsi pour le calcul basé ordonné par la hauteur des expressions on fera le calcul de la hauteur 0 jusqu'à la hauteur sup{h((P1), ..., h((Pn)}. Lors du calcul des listes de validité on pourra tirer partie du fait que certaines sous-expressions sont partagées ; si kif est partagée par (P; et (Pi le calcul de la liste de validité effectué pour (P; n'est donc pas à refaire pour (Pi. La seule adaptation véritable concerne le calcul de la limite d'inutilité. Si kif est une sous-expression de plusieurs principales (P;, ..., ck on cumulera sur LI(,F) l'ensemble des contraintes venant de (P; , ..., ~k. Exemple d'application du procédé pour la surveillance d'un système de fermeture automatique de portes Un système de fermeture automatique de portes d'un véhicule doit satisfaire à l'exigence que, chacune de ses portes doit être fermée dans les deux secondes qui suivent le dépassement de la vitesse de 5 kilomètres/heure par le véhicule. Nous supposons que chaque porte d'indice k est équipée d'un capteur Door_k_Locked qui vaut 1 quand la porte k est fermée et verrouillée, et qui vaut 0 sinon. En supposons que speed_exceed_5 dénote la proposition (speed 5) pour chaque porte l'exigence peut donc être écrite ainsi : speed_exceed_5 - E[o,2i Door_k_Locked Ce qui est redouté est donc exprimé par : (speed_exceed_5 - E[o,2i Door_k_Locked) Analysons la validité de cette formule compte tenu du processus décrit par le tableau ci-dessous :30 Instantané Date Speed Door_k_Locked 0 0 0 1 1 0.1 0 0 2 1.1 3 0 3 2 7 0 4 2.8 4 0 4.2 1 0 Dans cet exemple nous utiliserons la date d'inutilité (abs_di), version dégradée de la limite d'inutilité (abs_li). Les tableaux ci-dessous décrivent, en fonction des instantanés, l'évolution de certains attributs utiles à la compréhension du procédé, et ce pour chaque sous-expression du 5 comportement redoutés. On ne n'intéresse qu'à la porte d'indice k. Instantané 0: date 0, speed = 0, c.def c.w c.LV ~.abs_di vitesse_ excède _5 [o,o] [0,0]\0= [o,o] 0 ? Porte_k_Fermée [o,o] [0,0]\0= [o,o] [0,0] ? E~o,2~ Porte_k_Fermée [0,-2]=0 0\0= 0 0 ? (vitesse_ excède 5E[0,2] [0,-2]=0 0\0_ 0 0 ? Porte_k_Fermée) !( vitesse_ excède_ 5_5 -* E~o,2~ [0,-2]=0 0\0= 0 0 ? Porte_k_Fermée) Instantané 1, date 0.1 c.def c.w ~.LV c.abs di speed = 0 vitesse excède 5 [0,0.1 ] ]0,0.1 ] 0 ? Porte k Fermée [0,0.1 ] ]0,0.1 ] [0,0.1 [ ? E~o,2~ Porte_k_Fermée [0,- 0\0_ 0 0 ? 1.9]=0 (vitesse_ excède_ 5) -* E~o,2~ [0,- 0\0_ 0 0 ? Porte_k_Fermée) 1.9]=0 !(vitesse_ excède 5E[0,2] [0,- 0\0_ 0 0 ? Porte_k_Fermée) 1.9]=0 Instantané 2, date 1.1 c.def ~.w c.LV c.abs di speed = 3 vitesse_excède_5 [0,1.1] ]0,1.1] 0 ? Porte_k_Fermée [o,1.1 j ]0,1.1 ] [0,0.1 [ ? E[o,2] Porte_k_Fermée [0,-1.9]=0 0\0= 0 0 ? (vitesse_excède_5) E[0,2] [0,-1.9]=0 0\0= 0 0 ? Porte_k_Fermée) (vitesse_excède_5- E[o,2] [0,-1.9]=0 0\0= 0 0 ? Porte_k_Fermée) Instantané 3, date 2, c.def ~.w c.LV cl) abs di speed = 7 vitesse_excède_5 [0,2] ]1.1, 2] [2,2] o Porte_k_Fermée [0,2] ]1.1, 2] [0,0.1 [ o E[o,2~ Porte_k_Fermée [o,o] [o,o] [o,o]* o \0=[0,0] vitesse_excède_5~ E[o,2] [0,0] [o,o] [0,0]** o Porte_k_Fermée (vitesse_excède_5- E[o,2~ [0,0] [o,o] 0 o Porte_k_Fermée) * On a adjoint [-2,0.1 [ n [0,0] soit [0,0] ** (speed_exceed_5 - E[o,2] Door_k_Locked) est de la forme (a - b) qui est équivalente à (-ia v b). Quand a est faux alors -a et vrai et donc (-ia v b) l'est aussi. Comme speed_exceed_5 est fausse sur [0,0] il suit que -ispeed_exceed_5 est vraie sur [0,0] et donc de même de (- 1 o speed_exceed_5 v E[o,2] Door_k_Locked). Instantané 3, date 2.8, ~.def c.w c.LV ~.abs di speed = 4 vitesse excède 5 [0,2.8] ]2,2.8] [2,2.8[ 0.8 Porte_k_Fermée [0,2.8] ]2,2.8] [0,0.1 [* 0.8 E[o,2] Porte_k_Fermée [0,0.8] [0,0.8]\[0,0] [0,0.1 ]* 0.8 =]0,0.8] vitesse_excède_5~ E[o,2] [0,0.8] ]0,0.8] [0, 0.8] 0.8 Porte_k_Fermée (vitesse_excède_5~ E[o,2] [0,0.8] ]0,0.8] 0 0.8 Porte_k_Fermée) * On remarque que pour Door_k_Locked et E[o,2] Door_k_Locked les intervalles de validité [0,0.1 [ sont strictement inférieurs aux dates d'inutilité de ces formules ; nous pouvons donc les éliminer de leurs listes de. Ainsi ils disparaissent dans le tableau du prochain instantané. Instantané 4, date 4.2, c.def c.w c.LV c.abs di speed = 1 vitesse_excède_5 [0,4.2] ]2.8,4.2] [2,2.8] 2.2 Porte_k_Fermée [0,4.2] ]2.8,4.2] 0 2.2 E[o,2~ Porte_k_Fermée [0,2.2] [0,2.2]\[0,0.8] 0 2.2 =]0.8,2.2] vitesse_excède_5- E[o,2~ [0,2.2] ]0.8,2.2] [0,2[ 2.2 Porte_k_Fermée (vitesse_excède_5- E[o,2] [0,2.2] ]0.8,2.2] [2, 2.2] 2.2 Porte_k_Fermée) A cette étape un intervalle est créé dans la liste de formule principale, signifiant ainsi que le comportement redouté qu'elle modélise s'est produit. 1 o Une alarme peut donc être déclenchée pour signifier ce dysfonctionnement. Application du procédé aux systèmes synchrones Les systèmes synchrones sont des systèmes dont le changement d'état est cadencé par une horloge. Leurs changements d'états se produisent lors de chaque « tic » de cette horloge. Dans ce cas de figure on peut fixer par convention que le temps entre deux tics vaut 1 et que le premier tic est de date 0. Ainsi les dates portées par les instantanés seront des entiers. Dès lors, dans les intervalles de portée des opérateurs du langage, on ne mettra que des entiers relatifs ; ces entiers ne dénoteront plus des décalages dans les réels mais des décalages en nombre de tics. Par exemple, dans le contexte synchrone, E[1,3] p sera vraie en t (où t est un entier) si p est vraie entre 1 tic et 3 tics après t. Exemple d'application du procédé pour le diagnostique embarqué. Dans cet exemple le procédé selon l'invention est embarqué dans un contrôleur afin de surveiller qu'un signal reçu SigSys en entrée est conforme au signal de référence SigMod obtenu avec un modèle embarqué par le contrôleur. La notion de conformité est formalisée par une formule du langage. Etant la fonction valeur absolue abs(abs(x) = x si x 0 et abs(x) = -x sinon) les propositions sont: seuill pour abs(SigMod - SigSys) Autres exemples de formules: (p - E[4,4] p) « p est de période 4 » (p - E[4,4] p) n (Top{=1 }[o,4[ p) « p est strictement de période 4 (exactement 1 passage à vrai sur toute période de longueur 4 ouverte) » (Top p)-((-i(Bot p))U[3,3]Bot p) « quand p devient vraie elle reste vraie jusqu'au troisième tic où elle repasse à faux » 15 Top{ « q est dans le voisinage de p à +/- 0.5 près » 20 Réalisation du procédé Une réalisation du procédé selon l'invention est, par exemple, le prototype développé par l'inventeur du présent procédé. Ce prototype est écrit en 25 langage C et est une implantation parfaitement conforme au procédé en ce sens que les dates sont stockées selon un type dédié ne présentant pas les défauts d'absorption et de perte d'information que l'on rencontre avec les types standards comme les flottants de la norme IEEE754. En effet, si nous considérons deux flottants non nuls t et a de la norme IEEE754, il se peut 30 que t+a = t (où + est ici l'addition flottante) lorsque t est grand devant a. Or dans le cadre du procédé, la sommation de valeurs très éloignées peut parfaitement se produire, puisque nous sommes très souvent conduits à sommer la date courante avec des constantes (les paramètres des opérateurs). Les flottants IEEE754 sont donc inadaptés. C'est pourquoi le type dédié au temps doit être un type particulier, capable de représenter des nombres de tailles arbitraires, munit d'une somme exacte, commutative et associative (c'est-à-dire respectant les axiomes classiques de la somme) et aussi des prédicats de comparaison classiques (tels =, Les figures 9A et 9B représentent deux signaux dont on veut étudier la 1 o corrélation avec le prototype au sens de l'exemple détaillé ci-dessus. La figure 9A représente en jaune le signal selon le modèle de référence et en violet le signal du système acquis au moyen d'une carte d'acquisition. L'écart en valeur absolue entre les deux signaux est donné en figure 9B. Le système a été instrumenté selon la figure 9C pour pouvoir envoyer les données à 15 l'analyse par le prototype appelé « MONITEUR » dans cette figure. 20 25 30 Annexe 1 Notations : « Nil » intervient pour dénoter des objets vides ou non définis (listes vides, intervalles vides...) c.LV : pour liste de validité de cl) (listes d'intervalles disjoints rangés de façon croissante) clD.LV.first et clD.LV.last dénotent respectivement le premier et le dernier élément de c.LV (sont tous deux Nil lorsque c.LV est vide) Pour un intervalle deux notations sont utilisées: la notation usuelle telle: ]4.32, 6.21] la notation sous forme de quadruplet (I, lb, ub , u) où: I et u sont éléments de {0,1} qui dénotent l'ouverture ou la fermeture de l'intervalle sur les bornes lb et ub lb : borne inférieure ub: borne supérieure exemple : (0, 4.32, 6.21, 1) représente ]4.32, 6.21] si i est un intervalle alors i.1, i.lb, i.ub et i.0 dénotent les paramètres ci-dessus mentionnés Soit i un intervalle d'une liste de validité LV : i.pred dénote son prédécesseur dans LV (Nil si i est premier élément) i.next dénote l'intervalle suivant dans LV (Nil si i est dernier élément) Pour une expression donnée, la plupart des algorithmes de continuation donnés ci-dessous ont une structure commune : - Initialisation des itérateurs en fin des listes de validité des sous- expressions - Parcours des listes de validité des sous-expressions avec ces itérateurs dans le sens anti-chronologique (de la fin vers le début) - Test de la position de ces itérateurs par rapport à la zone d'influence o si hors influence saut à l'étape de raccordement du Buffer à la liste de validité o si dans la zone d'influence production de nouveaux intervalles dans Buffer - Raccordement du Buffer à la liste de validité de la formule calculée - FIN Dans tous les algorithmes, Buffer est une liste d'intervalles initialisée à la liste vide. Calcul dec1=-141 : 1. iter = '.LV.last, virtual = (1 - cl).w.ub + 1, 1) 2. Si iter n'est pas Nil faire : a. Si iter ii. sinon nv est (c.w.I, c.w.lb, iter.lb, 1 - iter.l ) c. si nv n c.w n'est pas Nil l'adjoindre à gauche dans Buffer d. iter = iter.pred e. retour à l'étape 4 5. Raccorder Buffer à droite de c.LV 6. FIN Calcul de cl) = V[a]'P : 1. iter = 'P.LV.last 2. Si iter n'est pas Nil faire : 2.1. Si iter n ZI( , cl)) est Nil a) Si iter Calcul de cl) = k-Pl n 2 : 1. iterl = 'P1.LV.last 2. iter2 = ,F2.LV.last 3. Si iterl n'est pas Nil faire 3.1. Si iterl n ZI( 1, cl)) est Nil a) Si iterl a) adjoindre (iterl n iter2 n c.w) à gauche dans Buffer b) iter2 = iter2.pred c) retour à l'étape 3.2 3.3. iterl = iterl .pred 3.4. retour à l'étape 3 4. Raccorder Buffer à droite de c.LV FIN Calcul de.1) =kFlv z: 1 o On introduit une notation supplémentaire. Soient i et j deux intervalles. On note j L i si une des conditions suivantes est satisfaite : - j est Nil et i n'est pas Nil - i=j - i.ub > j.ub 15 - i.ub = j.ub et i.0 = 1 etj.u=0 - i.ub = j.ub et i.0 = j.0 et une de ces conditions est satisfaite : o i.lb 20 Autrement dit j L i lorsque i va plus loin dans le futur que j ou bien, s'il va exactement aussi loin que j dans le futur, il va plus loin dans le passé que j. 1. iterl = kF1.LV.last, iter2 =2.LV.last, tmp = Nil 2. Si iterl ou iter2 est différent de Nil faire : 25 2.1. si iter2 L iterl alors passer à l'étape 2.3 2.2. sinon (on échange iterl et iter2): a) tmp = iterl b) iterl = iter2 c) iter2 = tmp 30 2.3. Si iterl Calcul de c = - T2 : se ramène au calcul de i v P2. Calcul de c = E; 'P : 1. iter = 'P.LV.last 2. Si iter n'est pas Nil faire : 2.1. Si iter n cl)) est Nil a) Si iter Calcul de cl) = G; 'P : 1. iter = 'P.LV.last 2. Si iter n'est pas Nil faire : 2.1. Si iter n ZI(, cl)) est Nil a) Si iter Calcul de c = U(1,o,b,k) 1112 : 1. iterl = kF1.LV.last, iter2 = ,F2.LV.last, ante = Nil 2. Si iter2 n'est pas Nil 2.1. Si iter2 n ZI( 2, cl)) est Nil a) Si iter2 c) iterl = iterl .pred d) retour à l'étape 2.3 2.4. iterl = ante (iterl est alors l'intervalle le plus antérieur de 'P1.LV qui étende iter2 vers le passé ou bien est Nil) 2.5. ante = Nil 2.6. Si iterl n'est pas Nil et que iterl ] chevauche iter2 à gauche alors adjoindre à gauche ((iterl .1, iterl .lb, iter2.lb, 1 - iter2.l) n (iter2.Ixk, iter2.Ib - b, iter2.Ib, 1 - iter2.1)) n c.w dans Buffer 2.7. iter2 = iter2.pred 2.8. retour à l'étape 2 3. Raccorder Buffer à droite de c.LV 4. FIN Calcul de c = U;+ avec 0 e i+ : 1. iterl = kF1.LV.last, iter2 = ,F2.LV.Iast 2. Si iter2 n'est pas Nil faire : 2.1. Si iter2 n ZI(2, cl)) est Nil a) Si iter2 Calcul de c1 = Top 'I': 1. iter = '.LV.last 2. Si iter"s n'est pas Nil faire : 2.1. Si iter n ZI( , d)) est Nil a) Si iter Calcul de c = S;+ 2 avec D e i+: 1. iterl = kF1.LV.last et iter2 = 'P2.LV.last 25 2. Si iter2 n'est pas Nil faire : 2.1. Si iter2 n ZI( 2, cl)) est Nil a) Si iter2 a) Si r = iter2 n [iterl n'est pas Nil alors adjoindre à gauche ((r.lx(i+),I, r.lb + (i+),Ib, r.ub + (i+).ub, r.ux(i+).u)n [iterl )) n c.w dans Buffer b) Si [iterl Calcul pour c = O(a). 1. iter = a.LV.last 2. Si iter"s n'est pas Nil faire : 2.1. Si iter n ZI(a, cl)) est Nil a) Si iter 0 ou bien k = 0: 1. iterl = kF1.LV.last et iter2 = 'P2.LV.last 2. Si iter2 n'est pas Nil faire : 2.1. Si iter2 n ZI( 2, cl)) est Nil a) Si iter2 b) Sinon iter2 = iter2.pred c) retour à l'étape 2 2.2. Si iterl n'est pas Nil faire : a) Si iterl chevauche c.w à gauche et que clD.LV.last jouxte c.w à gauche alors : - adjoindre iterl n c.w à gauche dans Buffer - passer à l'étape 3 b) Si r = iter2 n [iterl n'est pas Nil alors adjoindre (kxr.l, r.lb + d, iterl .ub, iterl .u) n c.w à gauche dans Buffer 1 o c) Si iterl Calcul pour c = f(6). 1. iter = a.LV.last 20 2. Si iter"s n'est pas Nil faire : 2.1. Si iter n ZI(a, cl)) est Nil a) Si iter Calculdec1=N; : 1. iter = '.LV.last 25 2. Buffer = (cl).wxO) (la liste Buffer est initialisée avec un unique intervalle de compteur 0 et égal à c.w) 3. Si iter n'est pas Nil faire : 3.1. Si iter n ZI(, cl)) est Nil a) Si iter c) retour à l'étape 3 3.2. Effectuer l'adjonction à gauche avec compteur de ((i.u, iter.lb - i.ub, iter.lb - i.lb, i.l) n c.w)xl dans Buffer 3.3. iter = iter.pred 3.4. retour à l'étape 3 4. Raccorder Buffer à droite de c.LV 5. FIN Calcul de c = Top{@}; `if : se réduit au calcul de @(N; (Top kif)) Calcul de c = Bot{@}; kif : se réduit au calcul de @(N; (Bot kif)) Calcul de c = (61,62) (procédure dédiée aux couples de termes) 1. iterl = al.LV.last ; iter2 = 62.LV.last 2. Si iterl n'est pas Nil faire : 2.1. Si iterl n ZI(61, cl)) est Nil a) Si iterl b) iterl = iter2 c) iter2 = tmp 4.4. En supposant que s1 est la valeur de iterl et s2 celle de iter2 ajouter (iterl niter2ncl).w)"(s1,s2) en tête de Buffer 4.5. si iterl .lb = iter2.lb et iterl .1 = iter2.l alors a) iterl = iterl .pred b) iter2 = iter2.pred c) retour à l'étape 4 4.6. Si iter2 chevauche iterl à gauche : a) iterl = iterl.pred b) retour à l'étape 4 4.7. iter2= iter2.pred 4.8. retour à l'étape 4 5. Raccorder Buffer à droite de c.LV 6. FIN Calcul général pour c = (61, .., an) Cette procédure est récursive : 1. Si n = 2 on applique le calcul dédié aux couples sur le couple (61,62) 2. Si n > 2 on voit cl) comme le couple (c', an) où c' = (61, .., an_1) et on fait: o Appel récursif au calcul de c' On applique le calcul dédié aux couples sur le couple (c',an) REVENDICATIONS1 - Procédé permettant, à partir de la spécification d'un comportement redouté en un langage de logique temporisée, de générer automatiquement un détecteur (11) ayant la capacité de signaler par la génération d'un signal représentatif toute occurrence dudit comportement redouté lors du fonctionnement d'un système (1) placé sous sa surveillance au moyen de capteurs, ledit détecteur étant caractérisé en ce qu'il comporte au moins les étapes suivantes mises en oeuvre par un processeur (13): - définir des variables caractéristiques du système à surveiller {xi, ... Xm}, - définir un certain nombre de propositions {pi, ..., pn} sur ces variables, - allouer en mémoire du détecteur un espace suffisant pour mémoriser un instantané relatif à ces propositions et à ces variables de signaux c'est-à-dire allouer pour le temps une variable réelle notée pour chaque proposition p une variable I.p et pour chaque variable de signal x une variable I.x, - définir une formule principale c, construite sur les propositions {pl, ..., pn} et les variables {xi, ... Xm} traduisant un comportement redouté ou une propriété du système en utilisant un langage composé d'opérateurs logiques et d'opérateurs temporels portant sur le futur et le passé et dont les termes T et les formules (D sont donnés par les grammaires BNF suivantes : r ::= c l x l (r,...,F) I f(F) T:=I'I(T,..., T ) IV[a]T Ni (D ITop T IBot T I)([n]r'If(T ) B ::=O(T)I(B ) (D ..=B I0( T )IV[a] 30 1 X[n] B(D U;+ (D I(D S;+(D ele S(d,k) 1 Top (D 1 Bot I(~) où f est un symbole de fonction, O un symbole de prédicat, a est un réel non nul, d un réel positif ou nul, n un entier relatif non nul, i+ tout intervalle dont les bornes sont positives ou nulles, i un intervalle standard quelconque ou un intervalle infini seulement à gauche, et dont la sémantique est la suivante : - Si c est une constante alors le terme c (dans le langage) dénote la fonction constante c(t) qui vaut toujours c, - Si x est un signal alors à la date t le terme x (dans le langage) vaut I.x où I est le plus proche instantané situé avant t, on notera x(t) cette valeur, - A la date t un n-uplet de termes (al, ..., an) vaut (ai(t), ..., an(t)) où 15 ak(t) dénote la valeur du terme ak en t, - A la date t le terme f(a) vaut f(a(t)), - L'opérateur V[a) est un opérateur de translation temporelle ; V[a]1 vaut en t ce que vaut (D en t+a, le terme N;(D vaut l'entier n à la date t si n est le nombre d'intervalles de validité de 1 qui ont une 20 intersection non vide avec i©t, - )(Rn) est un opérateur de décalage, le terme X[n] a vaut en t ce que vaut le terme a selon l'instantané l(k+n) Ou Ik est le plus proche instantané situé avant t, - L'opérateur Top est appelé opérateur de front montant. Top t vaut 25 la valeur v en t si (D passe de la valeur u à v (u ~ v) en t, - L'opérateur Bot est appelé opérateur de front descendant, Bot vaut u à la date t si (D passe de la valeur u à la valeur v (u ~ v) en t, - O(a) est en vraie en t si a(t) e O.set,0 - L'opérateur U;+ porte aussi sur le futur, la formule (DI U;+ (D2 est vraie en t si et seulement s'il existe une date t' de (i+)O+t où (D2 est vraie et que (DI est partout vraie dans l'intervalle [t, t'[, - L'opérateur Si, porte aussi sur le passé, la formule 01 Si, '2 est vraie en t si et seulement s'il existe une date t' de (rev(i+))©t où 02 est vraie et que cI est partout vraie dans l'intervalle ]t', t], - L'opérateur S(d,k) porte aussi sur le passé, )1S(d,k)(D2 signifie : « d)2 sera vraie vers le passé au-delà de -d et (DI sera partout vraie entre temps ». EDI S(d,k) $1)2 est vraie en t s'il existe une date t' au delà de t- ~o d (t-d comprise si k = 1 et t-d non comprise si k = 0) dans le passé où ED2 est vraie et que (DI est partout vraie sur ]t',t], - Une étape d'émission d'un signal Sc sur au moins une des sorties (161, 162, 163) dudit processeur (13) dans le cas où le comportement redouté ou la propriété du système spécifiée en 15 logique temporelle linéaire métrique est observé. 2 - Procédé selon la revendication 1 caractérisé en ce qu'il utilise le langage complet suivant : - Si p est un symbole de proposition, p est vraie à la date t si I.p = 1 20 où I est le plus proche instantané situé avant t, p abrège la formule =(p,1) du langage noyau, - L'opérateur est la négation. -4 abrège (1 - (D), elle vraie à une date t si et seulement si (D est fausse à cette date t, - L'opérateur A est appelé conjonction, la formule Il A 02 n'est vraie 25 à une date t que si (DI et (D2 sont toutes deux vraies à cette date t, elle abrège 'i x (D2, - L'opérateur v est appelé disjonction, la formule est vraie à une date t si (DI ou 02 est vraie à cette date t, la formule (DI v b2 abrège ((01 + (D2) - ((DI x 02)) du langage noyau,1 - L'opérateur - est appelé implication, la formule - (1)2 est fausse en t si nous avons 01 vraie en t et 02 fausse en t ; elle est vraie dans les autres cas, elle abrège -01 v 02 soit =((1- b1) + -((1- 01) x 02), 1) du langage noyau, - L'opérateur tripartite ? : est l'opérateur si-alors-sinon. 01 ? : 03 est vraie en t si 01 et 02 sont vraies en t ou bien si -01 et 03 sont vraie en t. ? : 03 abrège donc (01 A 02) v (--01 A 03), - L'opérateur E; est appelé opérateur existentiel, la formule E; 1 est vraie à une date t s'il existe au moins une date t' de l'intervalle i t où soit vraie, - L'opérateur G; est appelé opérateur universel, la formule G; est vraie à une date t si en toute date t' de l'intervalle iOt alors c est vraie en t', elle abrège -,(E; (-0)) soit 1-((N; (1-1))>O), - L'opérateur B(e,k) porte sur le passé cet opérateur signifie intuitivement : « antérieurement à e». B(e,k) ' abrège (N(O, 0,,e,k) ~)>O. B(e,k) ( est vraie en t sic est vraie dans (0,-oo,t+e,k), - L'opérateur B{@}(e,k) porte sur le passé, cet opérateur signifie intuitivement : « le nombre d'intervalles antérieurs à e satisfait @», B(e,k){@} 1) abrège @(N(o,-o,,e,k) ~). B{@} (e,k) 1) est vraie en t si le nombre d'intervalles la liste de validité de 1 ayant une intersection non vide avec (0,-oo,t+e,k) satisfait @, - Enfin Top@}; 4 et Bot{@}; 1 sont des contractions de @(N;(Top 0)) et de @(N;(Bot 0)), Top{@}; 1 est vraie en t si le nombre de transitions à vrai de 4 dans iO+t satisfait @, en notation BNF, le langage complet est le suivant : r::=c1x1(T,...,T)ff(r)IXin] r T:=rf(T,..., T ) IV[a)T IN;)ITopT IBot T If(T ) B ::= p 1 , B2 1B A B IB v BIB -> B I B? B :B 0(F) I(B ) ::=B I-i(DIEDA(DIOvEDI(D-p[DIED?ED:(D Io( T) X[n] B V[a] I B(e,k) B{@}(e,k) (D En) I Gis 1 1 U+0I0S1+c I S(d,k) ITop(le IBote I Top{@}; C I Bote}; I(0) où f est un symbole de fonction, O un symbole 3 - Procédé selon la revendication 1 caractérisé en ce que pour calculer la liste de validité des formules purement booléennes ledit procédé définit deux variables 1.val et 1.0 pour toute formule purement booléenne de la forme 25 O(P) avec 1P E t telles que : - c.val est une variable booléenne associée à 1, - c.LV est une liste d'intervalles associée à (D, - 1.O(1P) = 1 si l.'P E O.set et 1.0(W) = 0 sinon, En exécutant les étapes suivantes : prédicat, a est un nul, d un réel positif ou nul, n un entier relatif non nul, i+ tout intervalle dont les bornes sont positives ou nulles, i un intervalle standard quelconque ou un intervalle infini seulement à gauche, @ un prédicat sur les entiers naturels. de réel non3 La première étape, étape (20), est une étape d'initialisation des valeurs de 1.val et de 1.LV, La variable .val est initialisée à faux (soit 0) et la variable 4 .LV est initialisée par la liste vide, L'étape qui suit, étape (21), est un état d'attente de rafraichissement de l'instantané I, si ce rafraichissement intervient le procédé passe à l'étape (22) où la valeur de 1.0 est testée, Si la valeur de vérité de I.c est à vrai (vaut 1) le procédé teste, étape (23), la 10 valeur de c.val, Si O.val est à vrai alors, étape (24), le procédé prolonge le dernier intervalle de 1.LV jusqu'à I.t compris (intervalle fermé sur la valeur I.t), Si la valeur 1.val est à faux (vaut 0) alors, étape (25), le procédé ajoute à la fin de c.LV le nouvel intervalle [I.t, I.t], 15 Si au contraire, à l'étape (22), 1.0 est faux, alors le procédé teste O.val, Si O.val est à vrai , étape (26), alors le procédé prolonge le dernier intervalle de O.LV jusqu'à I.t non compris (ouvert sur I.t ) étape (28), Si O.val est à faux, alors le procédé laisse t.LV inchangée étape (27) A la suite des étapes (24, 25, 27, 28), le procédé affecte à O.val la valeur de 20 1.0 (étape 29), puis le procédé retourne à l'étape (21) d'attente de rafraichissement de I, le calcul se prolongeant tant que le procédé est maintenu en fonctionnement. 4 - Procédé selon la revendication 1 caractérisé en ce qu'à chaque 25 rafraichissement d'un instantané I, le procédé exécute les étapes de l'algorithme récursif suivant, appelé avec comme argument la principale c: D.1 - Si b est formule purement booléenne, calcul de la liste de validité selon l'algorithme propre à ce type de formule, D.2 - Sinon identification de l'opérateur de la formule b,4 D.2.1 - Appel (récursif) du présent algorithme sur les sous-expressions directes de 1 D.2.2 - Selon la nature de 0 calcul de sa liste de validité en fonction de celles de ses sous-expressions D.3 - FIN 5 - Procédé selon la revendication 1 caractérisé en ce qu'à chaque rafraichissement de l'instantané ledit procédé exécute les étapes suivantes : E.1 - soit k = 0 E.2 - « tant que » k faire E.2.1 - pour toute sous-formule Y de 0 telle que h('P) = k faire : c) Si Y est formule purement booléenne, calcul de sa liste de validité selon l'algorithme propre à ce type de formule d) Sinon calcul de la liste de validité de lY en fonction de sa ou ses 15 sous-expressions directes (qui ont forcément été déjà traitées puisque de hauteurs inférieures) E.2.2 - k = k + 1 E.2.3 - retour du « tant que » B2 E.3 - FIN. 20 6 - Procédé selon la revendication 1 caractérisé en ce que, étant donné un processus 7r, il attribue à chaque expression 1 du langage un intervalle de définition noté 1.def et égal à clef, (b) où def,, est la fonction définie par les cas énumérés ci-dessous : 25 - def,,((I,, ... , On)) = def,(I1) n ... n def,(In) où (01, ... , On) est un n-uplet de termes - deft(I) = [(ir.first).t, (ir.last).t] si 1 est purement booléenne ou bien un terme non décalé (1 est une expression de F ou de B) - def,(V[ai 0) = def'(I) (-a)5 - deMX[ni (D) = [(it.first).t, (it.(Iast-(n-1))).t[ si n > 0 où last est l'indice du dernier instantané de it - def,(X[' (D) = [7c(-n).t, (it.Iast).t] si n 7 - Procédé selon la revendication 6 caractérisé en ce que, si l'opérateur X[ 1 n'est pas utilisé, on pré calcule l'intervalle de définition en utilisant une logique d'offset par rapport à la date du premier instantané 7t.first.t et de la date du dernier instantané rt.last.t en utilisant des variantes de la définition de defn, variantes qui permettent pour chaque formule (D de pré calculer le quadruplet noté 0.5, ayant la même forme qu'un intervalle, de telle sorte qu'ensuite, lors du fonctionnement, on ait toujours: clef, ((D) = it.first.t + (.5.1b, it.last.t + b.6.ub, (D.5.u). 8 - Procédé selon les revendications 1 et 6 caractérisé en ce que : La liste de validité d'une expression (D ayant déjà été établie selon un processus 7t sur son intervalle de définition defti()), Si un nouvel instantané I arrive qui prolonge E en le processus 7t - I le calcul de nouveaux intervalles de validité pour (D ne porte que sur l'intervalle def,., ((D) \ defn((D) qui par définition de la fonction de définition représente la plus grande portion certaine mais non encore calculée du domaine de définition de (D selonn - I.6 Pour toute formule (D cet intervalle sera stocké dans une variable de type intervalle attribuée à que l'on notera O.w et que l'on nommera fenêtre de continuation de O. Lors du rafraichissement de la structure mémorisant l'instantané pour chaque 5 formule 0 l'actualisation de 1.w se fait avant l'actualisation de W.def et répond donc aux étapes suivantes : - O.w = def,((D) \ 1.def - O.def = def,((D) 10 9 - Procédé selon la revendication 1 caractérisé en ce qu'il comporte une étape de sélection des intervalles de validité influant sur la fenêtre de continuation calculés à partir des listes de validité des sous-formules en prenant en compte les intervalles dont la fermeture à droite est d'intersection non vide avec une zone d'influence calculée au moyen d'une fonction ZI 15 définie par les cas énumérés ci-dessous : ZI((D,E;b) = (w.lxi.l, w.lb + i.lb, w.ub + i.ub, w.0 x i.u) où w dénote la fenêtre de l'argument gauche de la fonction Zl, soit E; I ici. Définition de la fonction ZI : - ZI(a; , an )) = w avec a; an } 20 - ZI(a, f(a)) = w - Zl(a, 0(G)) = W - Zl(a,V[a]a)=W®a - ZI(c,* 0) = w avec * parmi Top, Bot - Zl(c,N;= (w.lxi.l, w.lb + i.lb, w.ub + i.ub, w.uxi.u) 25 - ZI(c1, ((DI U;+02)) = (1, w.lb + (i+),Ib, w.ub + (i+).ub, 1) - Zl(b2, (Ci U;+02)) = (w.lx(i+),I, w.lb + (i+),Ib, w.ub + (i+).ub, w.ux(i+).u) - ZI((D1, (01 S;+ 12)) = (1, w.lb - (i+).ub, w.ub - (i+),Ib, 1) - ZI(c2, (01 S;+ (D2)) = (w.lx(i+).u, w.lb - (i+).ub, w.ub - (i+),Ib, w.ux(i+),I) - ZI(01, (01 S(d.k) 1 2 )) = (1, w.lb - d, w.ub - d, 1) 30 - ZI(12, ((D1 S(d,k)b2 )) = (w.lxk, w.lb - d, w.ub - d, w.uxk)7 - ZI(I, B]e,k]O = (w.lxk, w.lb - e, w.ub - e, w.uxk) 10 - Procédé selon la revendication 1 caractérisé en ce qu'il comporte une étape d'élimination des intervalles de validité inutiles en établissant pour chaque sous-expression 'P de la formule principale 0, un couple de la forme (ub,u) de 9Zx{0,1}, appelé limite d'inutilité relative de `F et noté `P.rel_li, qui est déterminé de telle sorte qu'on puisse éliminer, sans nuire à la détection du comportement redouté, tout intervalle i de la liste de validité de W, dès lors que celui-ci satisfait : (i.ub,i.u)t('.def.ub + ub, u), le choix de la limite `F.rel_li étant fait de telle sorte que `I'.rel li 1= LI(W) où LI est définie de la façon suivante : étant donnée une formule principale c et l'ensemble {fil, ..., On} de ses sous-expressions une fonction LI de {01, ..., On, 1} - (9Zx{0,1}) est une fonction d'inutilité si elle satisfait des contraintes de la forme LI('P) /= LI(c) où W et 1 sont toutes les deux des sous- expressions de la principale (P et où W est une sous-expression directe de O. Ces contraintes sont les suivantes : - LI(0) = (0, O.def.u) Et pour i,j E [1,n] - LI(O;) 1= LI(* I;) où * est parmi Top, Bot - LI((;) t= LI(((1 ,..., On)) où (01, ... , On) est n-uplet de termes - LI(01)1= LI(* c;) où * est un symbole de fonction ou de prédicat - LI(di) 1= ((LI(V[a] «i)).ub + a, (Ll(V[a] ci))-u) - LI(1i) /= ((Ll(Nk 1;)).ub + k.lb, k.l = (LI(Nk 0;)).u) - LI(ci) /= «LI(Oi U;+ I])).ub + (i+),Ib, (i+).l = (LI(I; U;+ 1i)).u) - LI(Oi) /= «LI(Oi U;+ (Di)).ub + (i+),Ib, (i+).l = (LI(0; U;+ (D]))-u) - LI(Ii) /= «LI(Oi Si, «i).ub) - (i+).ub, (i+).0 = (LI(I; S;+ I])-u) ) - LI(ci) t= ((LI('; S;+ ci).ub) - (i+).ub, (i+).0 (LI(I; S;+ Ii).u) ) - LI(Ii) 1= ((Ll(4; S(d,k) Ii)).ub - d, k = LI((te; S(d,k) bi).u) - LI(Ji) 1= «LI(Oi S(d,k) c])).ub - d, k LI(4; S(d,k) 1i).U)8 - LI((D;) /= (LI(B(e,k) Oi).ub - e, k LI(B(e,k) (bi).u) - LI(r,(Di) ^= (j.lb, z) où j et z sont tels que les conditions suivantes sont réunies: - iA(m, x) et j^(m+n+1, y) sont des éléments de (r,(D;).LV - LI(X[e] I j) E i - z=Osie>Oetz=lsie 11 - Dispositif de détection (11) généré à partir de la spécification en logique temporisée d'un comportement redouté, appliqué à un système selon la revendication (1) dont le comportement est à surveiller, caractérisé en ce qu'il comporte au moins les éléments suivants : Une entrée recevant un ou plusieurs paramètre(s) caractéristique(s) de l'état du système à surveiller, et une horloge H indiquant la date d'acquisition de ce(s) paramètre(s), - Un processeur (13) adapté à exécuter les étapes du procédé selon l'une des revendications 1 à 11 en utilisant le(s) paramètre(s) mesuré(s) et la date associée, - Une mémoire (14) adaptée à o mémoriser l'instantané courant o mémoriser les listes de validité LV déterminées par la mise en oeuvre du procédé pour la formule principale permettant de signaler toute occurrence dudit comportement redouté et ses sous-expressions, - Une sortie (16i) émettant un signal Sc correspondant aux informations contenues dans la liste de validité pour la formule principale et émettre ledit signal.