WO2010026150A2 - Procede et systeme permettant de generer un dispositif de controle a partir de comportements redoutes specifies - Google Patents

Procede et systeme permettant de generer un dispositif de controle a partir de comportements redoutes specifies Download PDF

Info

Publication number
WO2010026150A2
WO2010026150A2 PCT/EP2009/061318 EP2009061318W WO2010026150A2 WO 2010026150 A2 WO2010026150 A2 WO 2010026150A2 EP 2009061318 W EP2009061318 W EP 2009061318W WO 2010026150 A2 WO2010026150 A2 WO 2010026150A2
Authority
WO
WIPO (PCT)
Prior art keywords
cert
formula
date
true
rel
Prior art date
Application number
PCT/EP2009/061318
Other languages
English (en)
Other versions
WO2010026150A3 (fr
Inventor
Nicolas Rapin
Original Assignee
Commissariat A L'energie Atomique
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Commissariat A L'energie Atomique filed Critical Commissariat A L'energie Atomique
Priority to EP09782492A priority Critical patent/EP2321728A2/fr
Publication of WO2010026150A2 publication Critical patent/WO2010026150A2/fr
Publication of WO2010026150A3 publication Critical patent/WO2010026150A3/fr

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation

Definitions

  • the invention relates to a method and a system for generating from the specification in a formal language of a dreaded behavior, automatically generating an observer agent, called monitor, capable, online, for an arbitrary duration and without loss of performance , to report any occurrence of said dreaded behavior specified during the operation of a system likely to produce this behavior. It allows the automatic generation of specified behavior detectors in metric linear time logic, with bounded memory, capable of operating online and for an arbitrarily long time. It is used in particular for the control and monitoring of simulated systems or even physical systems. It also makes it possible to carry out on-line diagnostics of control-command systems, monitoring of environments in home automation or robotics. It is also implemented for the proof of properties on finished executions / simulation. Different industries are concerned by the invention, such as: transport, telecom, Internet service, robotics and home automation industries.
  • proof techniques based on algebraic specifications. These techniques, if they make it possible to deal with complex, algorithmic functions, are not completely automatic.
  • the dedicated tools are proof assistants and the subtle part of the evidence is entrusted to qualified experts.
  • model-checking is completely automatic, but has the disadvantage of being limited to the treatment of a class of simple models, oriented control flow (without algorithms) .
  • the models analyzed by the "model-checking" technique must be limited in size. Otherwise, the tools consume memory space resources and computing time inaccessible in practice.
  • a formal monitoring tool is therefore a tool that accepts as input an expression specifying a dreaded behavior and outputs a monitor capable of detecting the occurrence of the dreaded behavior.
  • a formal monitoring approach there are mainly two formal monitoring approaches known to the Applicant.
  • the behavior of a system model or a physical system is represented by the evolution over time of a certain number of characteristic variables.
  • the behavior of a body in solid state physics, is characterized by the evolution of its characteristic variables such as its position, its speed, its acceleration, its kinetic moment, etc. Proposal.
  • Proposal refers to any expression that refers to the characteristic variables of the system and may be true or false.
  • the speed of the body k is 10 m / s”
  • the speed of the body k is strictly positive
  • the term "proposition” designates any linguistic expression, relating to the characteristic variables of a system, which can be either true or false. Instantaneous.
  • a snapshot gives the Boolean value of the defined propositions for a certain system. More formally we will speak of a snapshot relative to a set A of propositions to designate any pair (v, t) composed of a valuation v of the propositions of A and a date t (where t is element of the set of reals R).
  • evaluation of the propositions of A we mean any application of A in ⁇ 0,1 ⁇ , that is to say say an element of ⁇ 0,1 ⁇ A.
  • a process is used relative to a set A of propositions to designate any sequence indexed by the natural numbers of snapshots relating to A.
  • a process is therefore an application of S in I A where S c N, is an initial segment of N (for all i GS, if i> 0 then i -1 e S).
  • the first snapshot will have a date that we will call Origin. In the examples we will often choose 0 as the value for T_edge.
  • a process is therefore intuitively a sort of "movie" of how the system works.
  • 2.3. 1 and u are elements of ⁇ 0,1 ⁇ . They denote the opening or closing of the interval on terminals Ib and ub. If I is 0 the interval is open on its lower bound Ib, closed if I is 1. Idem for u which specifies the opening / closing on the upper bounded ub
  • the quadruplet (0, 4.32, 6.21, 1) represents the same interval as noted] 4.32, 6.21].
  • i.l, i.lb, i.ub and i.u denote the parameters mentioned above. So, for example, if i is] 4.32, 6.21] then:
  • a validity list is a list whose elements are well-formed intervals of the set of realities R, all disjoint, arranged in ascending (chronological) order.
  • the notation (h, i 2 , ..., in) will be used to designate a validity list containing the intervals H, i 2 , ... i n -
  • the chronological order means that if i k and i k + 1 are two consecutive intervals of a validity list we still have ik ⁇ ik + i-
  • ([0, 2.43 [, [3.27, 5.04]) is a validity list that contains two intervals, [0, 2.43 [ and [3.27, 5.04]. They are arranged in ascending or chronological order.
  • a validity list is by destination attached to an expression and allows to define, over a given time range, the dates when this expression is true and the dates when it is false, by conforming to the following convention: the dates that are within the intervals of the validity list are the dates when the expression is true; outside these intervals the expression is false.
  • connection on the left The connection of a validity list
  • the left of a validity list L is the result of the connection of L to the right of L '.
  • the object of the present invention relates to a method and a system for remedying at least the imperfections of the aforementioned methods.
  • the invention particularly relates to a method for automatically generating, from the formal specification of a feared behavior written in metric linear time logic, an automatic agent, called monitor, with bounded memory, capable of analyzing "on-line" the simulating a system model or the operation of a physical system to detect the occurrence of the specified dreaded behavior.
  • the method can therefore be used in the design phases to analyze a model, or in the test phases to analyze the operation of the realized system.
  • the present invention is based on the use of a formal language for specifying dreaded behaviors and a method for transforming any expression of this language into a powerful monitor, operating online, with no time limit.
  • the object of the present invention relates to a method for generating a detector of feared behaviors specified in metric linear time logic of a system whose behavior is to be monitored, characterized in that it comprises at least the following steps: implemented by a processor (steps on which we will come back later in the description):
  • ⁇ :: p
  • Option 1 Origin - ⁇ .rel_cert - Option 2: sup (Origin, Origin - ⁇ .rel_cert)
  • the invention also relates to a system for generating a detector of dreaded behaviors specified in linear temporal logic.
  • metric with bound memory, characterized in that it comprises at least the following elements: An input receiving one or more parameter (s) characteristic (s) of the state of the system to monitor, and a clock H indicating the date acquisition of this parameter (s), A processor adapted to perform the steps of the method according to the invention using the measured parameter (s) and the associated date, A suitable memory storing the current snapshot storing the validity lists LV determined by the implementation of the method for the main formula and its sub-formulas, where one or more outputs emitting a signal S corresponding to the information contained in the validity list for the main formula and transmit said signal.
  • FIG. 1 is a block diagram of the method according to the invention and FIG. 1B is an example of a system architecture enabling it to be implemented,
  • FIG. 2 a representation of the notion of process
  • FIG. 3 an algorithm for calculating the validity list of a proposition or of a formula called a purely Boolean formula
  • FIGS. 4, 5, 6A and 6B illustrate the calculation of the validity list of a formula according to those of its sub-formulas
  • Figure 7A the illustration of the calculation of the certainty date of a formula according to that of its sub-formula (for the unary operator on the future)
  • Figure 7B illustrates the calculation of the certainty date of a formula according to that of its sub-formulas (for the binary operator on the past)
  • FIG. 8A illustration of the definition of a zone of influence taken into account for the implementation of the method according to the invention
  • Figure 9 an example of application for monitoring the behavior of a mass-spring system.
  • FIG. 1A is a block diagram of an example of the method according to the invention comprising a system 1 whose behavior is to be observed, a time clock H making it possible to determine the date on which a snapshot was acquired, a processor that will process the data coming from the system to be monitored, for example a variable observed at a given moment and which will be able to evaluate the value of the propositions where this variable appears, to then calculate the validity lists attached to these propositions then the validity lists more complex formulas up to the validity list of the main formula specifying the dreaded behavior.
  • FIG. 1 B is shown an exemplary system according to the invention which comprises the system 1 whose behavior is monitored.
  • the system includes one or more sensors 10 for determining the value of each parameter representative of the monitored behavior. For example, it is possible to have a temperature sensor and check if a temperature proposal is true. Examples are given below.
  • the sensor or sensors of the parameters equipping the system 1 are connected to a device 11 comprising an input 12 and a processor 13 which will process the different data and a memory 14 storing the current snapshot and the validity lists of each formula.
  • the device 11 also comprises an input 15 receiving a clock specifying a date associated with a measured parameter.
  • the processor 13 will deliver via one or more outputs 16i a signal Sc containing data allowing, for example:
  • the signal obtained is transmitted to a device for generating an alarm and / or to a system control or regulation system under the supervision of a monitor generated by the method according to the invention.
  • the system whose behavior is monitored may be a model executed in simulation. This model can be very complex and / or large because the monitor generated according to the invention does not depend on the internal structure of this model. In this case the method can be considered as a model debugging technique.
  • the system can also be a device or a physical system which one wishes to control the behavior in operation and in particular to check its behavior. The process can then be considered as a subset of a larger control system.
  • the system according to the invention can be applied as a device making it possible to detect errors in the operation of a system, better known as the "debugger" of simulated systems, or as a monitor of physical systems for detecting malfunctions thereof. this in any industrial field (transport, home automation, robotics).
  • a monitor according to the invention consists in particular of several elements which will be explained below.
  • the concepts of process, proposal, validity list and snapshot have been defined previously.
  • One of the elements entering the generation of the monitor is the notion of validity list which is represented for example in Figures 4, 5, 6A, 6B.
  • the way in which a validity list can be deduced from a process is illustrated as follows. For this purpose, we examine the information that is delivered by a process to an observer or a sensor or monitoring device within a process. For this observer, the information delivered by a snapshot of the process remains until the snapshot following the i + i refreshes this information.
  • the information delivered by a snapshot of date t is equal to t 'where t' is the date of the next snapshot. If the last snapshot of the process has the date z, this principle makes it possible to define the validity of a proposition on any date of the interval [0, z] and thus a validity list on this range.
  • the steps of creating a validity list for the proposition p such as would be an observer placed in front of the process of Figure 2 are carried out below.
  • the process starts at 0 where snapshot I is refreshed.
  • It adds to the list of validity of p a first interval is [0.0, 0.0].
  • the validity list of p is therefore ([0.0, 0.0]).
  • the snapshot is refreshed in 1, py is always true.
  • the date value is 1.71.
  • the process extends the previous validity interval.
  • the list becomes ([0.0, 1.71]).
  • Any proposition p is associated with a boolean variable p. val and a variable list variable p.LV ("LV" for validity list). It is p.LV which represents the validity list for p. If I is a snapshot, then l.t is the date that I and l.p give to the truth value I assigns to proposition p. The algorithm is described by the diagram shown in Figure 3.
  • the first step, step 20, is a step of initializing the values of p. val and p.LV.
  • the variable p.val is initialized to false and the variable p.LV is initialized by the empty list.
  • the next step, step 21, is a refresh standby state of snapshot I. When this refresh occurs the algorithm goes to step 22 where the value of l.p is tested. If the truth value of l.p is true (is 1) the method tests, step 23, the value of p.val. If p.val is true then, step 24, the process extends the last interval of p.LV up to and including (closed interval on the value l.t). If the value p.val is false (worth 0) then, step 25, the process adds at the end of p.LV the new interval [l.t, l.t].
  • step 22 If, on the other hand, in step 22, lp is false, then the method tests p.val. If p.val is true, step 26, then the process extends the last interval of p.LV up to and excluding lt (open on lt) (step 28). If p.val is false, then the process leaves p.LV unchanged (step 27). Following steps 24, 25, 27 and 28, the method assigns p.val the value of lp (step 29). Then the process returns to the refresh standby step 21 of I, the calculation continuing as long as the process is kept running. As such, there is no stopping condition for this computation algorithm since it is waiting for a new snapshot. It can nevertheless be easily modified if the indication that a snapshot is the last is available.
  • the return to step 21 would be subject to the condition that the submitted snapshot is not the last.
  • the stopping condition will be determined by a strategy of using the complete method, that is to say by a strategy of exploitation of the validity lists.
  • the method can generate a simple monitor, for a language restricted to the proposals.
  • a first example of implementation of the method is given without limitation, for a dreaded behavior specified by a single proposal. In this example, it is proposed to generate a monitor to observe the bank account of a customer, posing as dreaded behavior that the balance is negative in other words that the proposal (balance ⁇ 0) is true at a given moment .
  • the process is considered relative to the set ⁇ (balance ⁇ 0) ⁇ .
  • the method then consists of the following algorithm: 1 - Allocate a boolean variable denoted I. (balance ⁇ 0) to store the value of (balance ⁇ 0) and a variable lt of real type to store the refresh date
  • ⁇ :: p
  • the direct sub-formulas of a formula are those placed directly under its operator. For example, for -i ⁇ it is ⁇ . For ⁇ i U [ a , b] ⁇ 2 it is ⁇ 1 and ⁇ 2 .
  • • ⁇ .val is a Boolean variable associated with ⁇ . It is initialized to 0.
  • Figure 4 illustrates the calculation of the validity list of -i ⁇ knowing that of ⁇ .
  • the principle is as follows: two successive intervals i and i + 1 of ⁇ give rise to an interval for -i ⁇ which inserts between i and i + 1. (See Appendix 1 for a more detailed description).
  • the validity list of ⁇ i ⁇ ⁇ 2 depends on those of ⁇ i and ⁇ 2 .
  • the principle is: if h is an interval of ⁇ i and i 2 is an interval of ⁇ 2 and hni 2 ⁇ 0, then hni 2 is an interval of ⁇ ⁇ ⁇ ⁇ 2 . (See Appendix 1 for a more detailed description).
  • Figure 5 illustrates how an interval of F [a , b] ⁇ is produced as a function of an existing interval in the validity list of ⁇ . If i is an interval of ⁇ we deduce that the interval (i ⁇ [-b, -a]) contains the validity dates for F [a , b] ⁇ according to the data of i. Indeed, let us choose a date t of i ⁇ [-b, -a]. Is ⁇ actually true in [t + a, t + b]? In other words, does [t + a, t + b] cut i? Suppose this is not the case.
  • the set i 2 is itself a set of dates that validate ⁇ 1 U [a , b] ⁇ 2 -
  • the interval i 2 must therefore also be adjoint to ( ⁇ 1 U [ a , b] ⁇ 2 ) .LV.
  • the validity list of P [a,>] ⁇ depends only on the first interval of the validity list of ⁇ . If it exists and is of the form [u, v] then the validity list of P [a , > ] ⁇ is composed of the single interval [u + a, ⁇ [.
  • the calculation of the validity list uses a non-recursive algorithm based on the height of the formulas.
  • the certainty window will be, for any formula ⁇ , the interval [T_origin - Cert ( ⁇ ), lt - Cert ( ⁇ )].
  • the certainty window will be, for any formula ⁇ , interval [sup (Origin, (Origin - Cert ( ⁇ ))), lt - Cert ( ⁇ )].
  • F [a , b ] P can be determined only until r - b. Indeed consider a date t ⁇ r - b. So t + b ⁇ r. Can the validity of F [ab ] p be determined in t? According to the definition of this operator this can be determined if the validity of p is certain on any date of [t + a, t + b]. Now this is the case since having t + b ⁇ r and a ⁇ b, it follows that all the dates of p on [t + a, t + b] are lower than r and therefore the validity of p known for each.
  • each sub-formula ⁇ of the principal is assigned a real variable named ⁇ .abs_cert intended to store the absolute certainty date of ⁇ .
  • ⁇ .abs_cert intended to store the absolute certainty date of ⁇ .
  • the initialization depends on an option. For ⁇ this variable ⁇ .abs_cert will be initialized either to (option 1) T_edge -
  • FIG. 8A illustrates the zone of influence for F [a , b] ⁇ .
  • the last snapshot is I 'while the precedent is I.
  • w of F [a , b] ⁇ is therefore] lt - (F [a! b] ⁇ ) .rel_cert, the .t - (F [a , b ] ⁇ ) .rel_cert].
  • the first dates on the value of ⁇ which influence the continuation window of F [aib ] ⁇ are the dates superior to lt - (F [a! B] ⁇ ) .rel_cert + a while the last one which influences this window of continuation is the .t - (F [a ib ] ⁇ ) .rel_cert + b. In other words, it is the interval F [aib ] .w ⁇ [a, b].
  • This can be expressed and generalized as a function that accepts two formulas as arguments and returns an interval. If ⁇ is a direct subformula formula of ⁇ , ZI ( ⁇ , ⁇ ) is the time range of the validity list of ⁇ to consider in calculating the continuation of ⁇ .
  • the process will take into account the constraints that a function, which we will call Dl, must satisfy to be a function of uselessness with the idea that a function of uselessness takes as argument a formula ⁇ n supposed to be a sub-formula of a main formula ⁇ , and returns a real number DI ( ⁇ n ), so that the absolute useless date ⁇ n .abs_di of ⁇ n is: ⁇ .abs_di + DI ( ⁇ n ) .
  • DI ( ⁇ n ) is therefore a useless date relative to the date of absolute uselessness ⁇ .abs_di of the main formula.
  • DI ( ⁇ n ) is therefore a useless date relative to the date of absolute uselessness ⁇ .abs_di of the main formula.
  • FIG. 9 illustrates an example of practical application to control the behavior of a mass-spring system.
  • a mass M moving without friction on a horizontal plane is connected to a vertical support S by a spring R and a damping system A.
  • Several properties can be analyzed by the method according to the invention, during a simulation of this model.
  • an expected property could be that the force f and the displacement x always vary in the same direction. In other words, what is feared is the proposition (df.dx ⁇ 0). It is possible to release this property by asking that if it happens that (df.dx ⁇ 0) then (df.dx> 0) is restored between 0.2 and 0.5 seconds later. In other words, the expected property is (df.dx ⁇ 0) ⁇ F [0 2, 05] (df.dx> 0).
  • the formula expressing the dreaded behavior is therefore -1 (-1 ((df.dx ⁇ 0) ⁇ -1 Fp 2, 05] (df.dx> 0))) that is to say simply: (df .dx ⁇ 0) ⁇ -1 F [0 2 , 05] (-> (df.dx ⁇ O)).
  • Another expected property could be: we must have (df.dx> 0) globally but we tolerate that (df.dx ⁇ 0) when df is close to zero (at plus or minus 0.5 newtons).
  • the expected property is (df.dx> 0) v (- 0.5 ⁇ df ⁇ 0.5).
  • the dreaded property is its negation -1 ((df.dx> 0) v (-0.5 ⁇ df ⁇ 0.5)) or simply ((df.dx ⁇ 0) ⁇ (-0.5 ⁇ f v f> 0.5)).
  • X (i) means that the value X has been calculated because the formula considered is a sub-formula of the formula of the line i.
  • the notation 0.2 (3) in line 2 means that 0.2 has been calculated for -i (df.dx ⁇ 0) because this formula is a sub-formula of that found in line 3. It can be seen that (df.dx ⁇ 0) is a sub-formula of two formulas (those in line 2 and 5, which is why there are two values for this formula).
  • intervals of their respective validity lists predate strictly their respective absolute useless dates. These are [0.0.3 [for ⁇ i and [0.3.0.7 [for ⁇ 2 . These intervals can be deleted from the respective validity lists (they no longer play any role in the detection of ⁇ 5 which is the main one). As it was explained, it is this mode of suppression which makes it possible to ensure that the monitor requires a bounded memory resource.
  • the method and the system according to the invention have the following advantages in particular:
  • An automatic method the monitor is automatically calculated from the expression of the dreaded behavior and the operation of the monitor is automatic in normal operation. It is fast and inexpensive in memory.
  • the method can be applied to any model, unlike the proof or model-checking model approaches that analyze the model as defined in its internal structure.
  • the monitor is only interested in executions of a system, to its observable productions. Whether the model is, in its internal structure, very simple or very complex, small or large, this has no impact on the generated monitor, since it does not depend on the structure of the model but only on the formula given in Entrance.
  • the analysis is done online, which means that:
  • the method according to the invention does not suppose a particular regularity on the execution, the delay between two observations being any.
  • Buffer is a variable of validity list type, initialized empty from each algorithm. "Nil” does not have a specific meaning. It intervenes to denote empty or undefined objects (lists, intervals %)
  • ⁇ .LV for list of validity of ⁇ (lists of disjoint intervals steadily increased)
  • ⁇ .LV.first and ⁇ .LV.Iast denote respectively the first and the last element of ⁇ .LV (are both Nil to denote that ⁇ .LV is empty)
  • I and u are elements of ⁇ 0,1 ⁇ which denote the opening or closing of the interval on terminals Ib and ub
  • Ib lower bound
  • ub upper bound example: (0, 4.32, 6.21, 1) represents] 4.32, 6.21] if i is an interval then i.l, i.lb, i.ub and i.u denote the parameters mentioned above
  • i be an interval of a validity list LV: i.pred denotes its predecessor in LV (Nil if i is the first element) i.next denotes the following interval in LV (Nil if i is last element)
  • ⁇ .LV is not empty, then be i its unique interval. This interval is modified so that it becomes (i.l, i.lb, w.ub, w.u) and FIN.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

Procédé permettant de générer automatiquement un détecteur de comportements redoutés spécifiés en logique temporelle linéaire métrique, à mémoire bornée, capable de fonctionner en ligne et pendant un temps arbitrairement long. Le procédé utilise une fenêtre temporelle pour effectuer le calcul en ligne des intervalles de validité de la formule qui spécifie le comportement redouté et élimine également en ligne les intervalles devenus non pertinents pour détecter ce comportement. Ce procédé peut être utilisé pour le débogage de modèles ou comme composant d'un système de contrôle-commande.

Description

PROCEDE ET SYSTEME PERMETTANT DE GENERER UN DISPOSITIF DE CONTROLE A PARTIR DE COMPORTEMENTS REDOUTES
SPECIFIES
L'invention concerne un procédé et un système permettant, à partir de la spécification en un langage formel d'un comportement redouté, de générer automatiquement un agent observateur, appelé moniteur, capable, en ligne, pendant une durée arbitraire et 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 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 mise en œuvre 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.
Sur le marché des équipements industriels et grand public, les demandes de performances et de fonctionnalités s'accroissent continuellement. Pour faire face à ces demandes, les industriels ont été conduits à concevoir et à produire des systèmes dits complexes, c'est-à-dire constitués d'entités de natures différentes (mécanique, électronique, informatique, etc.) fonctionnant en forte interaction. Cet accroissement de complexité des systèmes va de pair avec l'augmentation du risque d'erreurs commises lors des phases de conception et de réalisation. Or ces erreurs se répercutent bien souvent sous la forme d'anomalies de fonctionnement du produit final. Il est donc crucial, pour des raisons évidentes de sécurité des personnes, d'économie et de préservation de l'image de marque, de détecter des erreurs de conception et/ou de réalisation avant qu'un produit soit mis sur le marché. Les industriels qui produisent des systèmes complexes sont à la recherche de méthodes et d'outils permettant de minimiser le nombre d'erreurs commises lors du cycle de développement de leurs produits, que ce soit en amont lors des phases de conception ou bien en aval lors des phases de test de validation. Les méthodes formelles connues de l'art antérieur permettent, sur un périmètre limité, de remplir en partie au moins cet objectif. En général, elles proposent des langages de spécification et des structures de modélisation mathématiquement fondés, grâce auxquels, il est possible de prouver mathématiquement qu'un modèle proche de la réalisation d'un produit est conforme à la spécification de ce produit. Principalement, deux approches techniques se sont imposées à l'heure actuelle.
Tout d'abord, les techniques de preuve, basées sur les spécifications algébriques. Ces techniques, si elles permettent de traiter des fonctions complexes, algorithmiques, ne sont pas complètement automatiques. Les outils dédiés sont des assistants de preuve et la partie subtile des preuves est confiée à des experts qualifiés.
L'autre type de technique plus connue sous l'abréviation anglo-saxonne « model-checking » est totalement automatique, mais présente comme inconvénient d'être limitée au traitement d'une classe de modèles simples, orientés flot de contrôle (sans algorithmes). De surcroît, les modèles analysés par la technique de « model-checking » doivent être limités en taille. A défaut, les outils consomment des ressources en espace mémoire et temps de calcul inaccessibles en pratique.
Par ailleurs, les méthodes formelles proposent également des techniques de test qui automatisent la génération de tests à partir de modèles exécutables. Mais souvent, les tests ne répondent pas nécessairement aux objectifs intuitifs de l'utilisateur. Ces tests n'aident donc pas l'utilisateur à accroître sa confiance dans la correction du système qu'il a réalisé. Face à ces difficultés les techniques dites de monitoring permettent d'apporter des réponses pertinentes. Ces techniques sont qualifiées de techniques « boîte noire » en ce sens qu'elles ignorent la structure interne d'un système, pour ne s'intéresser qu'à ses productions observables. L'avantage de telles techniques est qu'elles peuvent être mises en œuvre quel que soit le système puisque sa complexité intrinsèque n'est pas prise en compte. En revanche ce sont des techniques de falsification : elles peuvent apporter la preuve qu'un système ne satisfait pas une exigence, mais non que le système satisfera toujours une exigence. Le monitoring au sens le plus général consiste à observer un système, un processus, en vue de détecter un événement plus ou moins complexe. Le monitoring formel se présente quant à lui comme une technique permettant de générer automatiquement des moniteurs à partir de spécifications en langages formels de comportements redoutés. Schématiquement un outil de monitoring formel est donc un outil qui accepte en entrée une expression spécifiant un comportement redouté et produit en sortie un moniteur capable de détecter l'occurrence du comportement redouté. Dans l'art antérieur il existe principalement deux approches de 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 Temporal Logic Spécifications ». 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 Φ » où Φ est une formule qui spécifie un comportement redouté. Problème que l'on peut noter plus brièvement : C /= Φ ?
(Lire : est-ce que le comportement observé C valide Φ ?) Avant d'avoir observé le système, le problème se pose donc comme suit :
0/= Φ ? 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 Φn+i, une nouvelle formule, telle que l'on ait : C /= Φn « C.0 /=Φn+1 où Co est le comportement défini comme le comportement C suivi de l'observation o. Par transitivité :
0\= φ <£=> ... £=> C /= Φn <=> C.O /= Φn+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 « 0 I= Φ ? ». Ce que les auteurs « appellent résoudre le passé et dériver le futur ». 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 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 permis sont des entiers naturels (ainsi que l'indiquent les définitions de F+(Φ) et F"(Φ)), • 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 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 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 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 Φi et Φ2, il est possible de déduire qu'un intervalle / est dans l'ensemble des intervalles de validité de la formule Φi Λ Φ2 si et seulement s'il existe un intervalle j de Φi et un intervalle k de Φ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 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. 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 ci-dessous. Notion de processus
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. Proposition. 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 5m/s, alors la proposition « vk == 10 » est fausse puisque « 5 == 10 » est fausse. Dans la suite le terme proposition désigne toute expression langagière, portant sur les variables caractéristiques d'un système, pouvant être soit vraie, soit fausse. Instantané.
Intuitivement un instantané donne la valeur booléenne des propositions définies pour un système à une certaine. Plus formellement on parlera d'instantané relativement à un ensemble A de propositions pour désigner tout couple (v,t) composé d'une valuation v des propositions de A et d'une date t (où t est élément de l'ensemble des réels R). Par valuation des proposition de A nous entendons toute application de A dans {0,1}, c'est-à- dire un élément de {0,1 }A. Par convention, si v G {0,1 }A est une valuation et p une proposition de A, si v(p) = 0 (resp. v(p) = 1 ) on dira que p est fausse (resp. vraie) selon v. L'ensemble de tous les instantanés relativement à A, que l'on notera U, est donc {0,1 }A x R. Par commodité, si I est l'instantané (v, t) relativement à A et que p est une proposition de A, on notera l.p la valeur que I donne à p, soit v(p) et l.t la date portée par I, soit t.
Par exemple ({p0 |→ 1 , pi \→ 1 , P2 \→ 0}, 1 .3465) est un instantané relativement à A = {p0, pi , p2J- Un tel instantané peut se lire : à la date 1 .3465, les propositions p0 et pi sont vraies, p2 est fausse.
D'après les notations introduites, nous avons donc Lp0 = 1 et l.t = 1 .3465.
Processus.
Dans le contexte de la présente invention le terme processus est utilisé relativement à un ensemble A de propositions pour désigner toute suite indicée par les entiers naturels d'instantanés relatifs à A. Mathématiquement un processus est donc une application de S dans IA où S c N, est un segment initial de N (pour tout i G S, si i>0 alors i -1 e S). Le premier instantané portera une date que nous appellerons T_origine. Dans les exemples nous choisirons souvent 0 comme la valeur pour T_origine. En tant que suite d'instantanés, un processus est donc intuitivement une sorte de « film » du fonctionnement du système. Intervalles
Dans la suite il sera question d'intervalles dans l'ensemble des nombres réels noté R. Pour noter un intervalle deux notations seront utilisées : 1 . la notation usuelle telle: ]4.32, 6.21 ]
2. la notation sous forme de quadruplet (I, Ib, ub, u) où:
2.1 . Ib : borne inférieure
2.2. ub : borne supérieure
2.3. 1 et u sont éléments de {0,1 }. Ils dénotent l'ouverture ou la fermeture de l'intervalle sur les bornes Ib et ub. Si I vaut 0 l'intervalle est ouvert sur sa borne inférieure Ib, fermé si I vaut 1. Idem pour u qui spécifie l'ouverture/fermeture sur la borné supérieure ub
Par exemple le quadruplet (0, 4.32, 6.21 , 1) représente le même intervalle que celui noté] 4.32, 6.21].
Si i est un intervalle alors i.l, i.lb, i.ub et i.u 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.u est 1
• i.l est 0
SM et j sont deux intervalles, nous dirons que i est strictement inférieur à j et nous noterons i < j si : • leur intersection est vide ( i n j = 0 ) et
• i.ub ≤ j. Ib.
Si i est un intervalle alors :
• L'intervalle noté i] , appelé fermé à droite de i, est (i.l, i.lb, i.ub, 1 ) ou bien encore, de façon équivalente : i u [i.ub, i.ub].
• L'intervalle noté [i, appelé fermé à gauche de i, est (1 , i.lb, i.ub, i.u) ou bien encore, de façon équivalente : [i.lb, i.lb] u i.
Pour qu'un intervalle i soit bien formé il faut soit que i.lb < i.ub soit que cet intervalle soit de la forme [x,x] où x est un réel. Quand un intervalle n'est pas bien formé il est supposé être l'intervalle vide (on dira aussi « Nil »).
Si i et j sont deux intervalles nous dirons que : • i chevauche j à gauche si i n j ≠ 0 et que (i n j).lb = j.lb (autrement dit i couvre j et le dépasse 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.
• i chevauche j à droite si i n j ≠ 0 et que i n j.ub = j.ub (autrement dit i couvre j et le dépasse dans le futur).
• i jouxte j à gauche si i.ub = j.lb et i.u + j.l = 1. Exemples : [0,1 [ jouxte [1 ,2] à gauche ; [0,3] jouxte ]3,8] à gauche.
• i jouxte j à droite si j jouxte i à gauche. Exemple :] 8,9] jouxte [4,8] à droite car [4,8] jouxte ]8,9] à gauche.
L'opérateur Θ :
Soit i un intervalle et [a,b] un intervalle fermé sur chacune de ses bornes. Alors l'opération i θ [a,b] est définie et son résultat est (i.l, i.lb + a, i.ub + b, i.u). Exemples : • [5,8[ Θ [1 ,2] = [6,10[
• [5,8[ Θ [-3,-2] = [2,6[
Liste de validité
Une liste de validité est une liste dont les éléments sont des intervalles bien formés de l'ensemble des réels R, tous disjoints, rangés dans l'ordre croissant (chronologique). La notation (h, i2, ..., in) sera utilisée pour désigner une liste de validité contenant les intervalles H , i2, ... in- L'ordre chronologique signifie que si ik et ik+1 sont deux intervalles consécutifs d'une liste de validité nous avons toujours ik < ik+i- Par exemple : ([0, 2.43 [, [3.27, 5.04] ) est une liste de validité qui contient deux intervalles, [0, 2.43[ et [3.27, 5.04]. Ils sont bien rangés dans l'ordre croissant ou chronologique.
Pour mettre en évidence le premier ou le dernier élément d'une liste de validité nous utiliserons les notations : • (i I 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 ] L)). L peut éventuellement être vide.
• (L I 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 | i)). L peut éventuellement être vide.
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 dehors de ces intervalles l'expression est fausse.
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 | L): • si i est vide alors le résultat est la liste vide.
• Si i < j alors le résultat est (i | (j | L)). Autrement dit on ajoute i en tête de ( j | L).
• si i jouxte ou chevauche j à gauche, alors le résultat est ((U, i.lb, j.ub, j.u) | L). Autrement dit on étend le premier élément j dans le passé jusqu'à la borne inférieure de i.
• Dans tout autre cas le résultat est L elle-même. Adjonction à droite de l'intervalle i à (L | j) est :
• si i est vide alors le résultat est la liste vide.
• Si j < i alors le résultat est ((L | j) | i). Autrement dit on ajoute i en fin de (L | j). • si i jouxte ou chevauche j à droite, alors le résultat est (L | (j.l, j.lb, i.ub, Lu)). Autrement dit on étend le dernier élément j dans le futur jusqu'à la borne supérieure de i.
• Dans tout autre cas le résultat est L elle-même.
Raccordements de listes de validité
Raccordement à droite. Soient (L1 | j) et (i | L2) deux listes de validité. Le raccordement de (i | L2) à droite de (L1 | j) a pour résultat :
• si j < i alors ((L1 | j) , (i | L2) ). Autrement la liste (i | L2) est placée à la fin de (L1 | j)
• si i jouxte ou chevauche j à droite alors (M, L2) où M est le résultat de l'adjonction à droite de i à (L1 | j)
• (L1 | j) dans les autres cas
Exemple de raccordement à droite. Soit L= ([1 ,2[) et L' = ([2,3[, [8,12[). Le 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.
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'.
Notion de langage formel, d'expression et de hauteur d'une expression formelle
Les méthodes formelles, comme les mathématiques dont elles sont issues, ont coutume de définir ce que l'on appelle des langages formels. Pour définir un langage formel on procède ainsi. On définit d'abord les expressions de base, qui sont insécables, autrement dit les mots. Puis on donne des règles de construction pour obtenir des expressions plus complexes, l'ensemble de ces règles formant une grammaire. Par exemple, les « mathématiques de l'écolier » reposent implicitement sur un langage formel. Les mots de base sont composés des nombres entiers comme « 3 », « 4 », « 10 » et de symboles tels que « + », « - ». Une règle de grammaire s'énonce par exemple ainsi : si « a » et « b » sont des expressions bien formées alors « a + b » est aussi une expression bien formée. Ainsi « 3 + 4 + 10» est un mot bien formé car « 3 + 4 » et « 10 » sont des expressions bien formées; en revanche « + 3 ++ 8 » n'est pas une expression licite. On peut ensuite attribuer une hauteur à une expression formelle. C'est-à-dire que nous pouvons définir une application H des expressions vers les entiers naturels de sorte que si Φ est une expression, h(Φ) soit la hauteur de Φ. Par exemple, pour reprendre l'exemple précédent, h peut être définie de la sorte :
• h(Φ) vaut 0 si Φ est un mot de base • h(Φ1 + Φ2) = sup( h(Φ1), h(Φ2) ) + 1
Selon cette définition il vient que h("3+4+10") = 2.
L'objet de la présente invention concerne un procédé et un système permettant de remédier au moins aux imperfections des méthodes précitées. L'invention concerne notamment un procédé permettant de générer automatiquement, à partir de la spécification formelle d'un comportement redouté écrite en logique temporelle linéaire métrique, un agent automatique, appelé moniteur, à mémoire bornée, capable d'analyser « en ligne » la simulation d'un modèle de système ou le fonctionnement d'un système physique afin d'y détecter l'occurrence du comportement redouté spécifié. Le procédé peut donc être utilisé dans les phases de conception pour analyser un modèle, ou dans les phases de test pour analyser le fonctionnement du système réalisé. Synthétiquement la présente invention repose sur l'utilisation d'un langage formel permettant de spécifier des comportements redoutés et d'un procédé permettant de transformer n'importe quelle expression de ce langage en un moniteur performant, fonctionnant en ligne, sans limite de durée. L'objet de la présente invention concerne un procédé permettant de générer un détecteur de comportements redoutés spécifiés en logique temporelle linéaire métrique d'un système dont le comportement est à surveiller caractérisé en ce qu'il comporte au moins les étapes suivantes mises en œuvre par un processeur (étapes sur lesquelles nous reviendrons largement dans la suite de la description) :
• définir des variables caractéristiques du système à surveiller,
• définir un certain nombre de propositions Jp1, ..., pn} sur ces variables, • allouer en mémoire du détecteur un espace suffisant pour mémoriser un instantané relatif à ces propositions c'est-à-dire allouer une variable réelle notée l.t et n variables booléennes pour chaque proposition de {pi, ..., pn}. Si pk est une proposition, l.pk dénote la variable booléenne associée à pk, • définir une formule principale Φ, construite sur lesdites propositions {p-i, ..., pn} traduisant un comportement redouté en utilisant un langage composé d'opérateurs logiques et d'opérateurs temporels portant sur le futur et le passé et dont la grammaire BNF est la suivante : φ ::= p | -i φ | (pi Λ φ2 | φi v φ2 | F[a,b] φ | ψi U[a,b] ψ2 I ψi S[a,bj (p2 | ψi S[a,>] φ2 | P[a,b] Φ I P[a,>] φ | ( φ )
OÙ p G (P1 , ... , pn}
• définir la date de début d'observation : T_origine,
• choisir une option sur la certitude initiale des formules (dont il dépend que l'on accepte ou non que la validité des formules soit définie antérieurement à T_origine),
• pour chaque sous-formule Ψ de Φ (y compris Φ elle-même), créer une variable notée Ψ.LV de type liste d'intervalles, et lïnitialiser à vide,
• pour toute sous-formule Ψ de Φ (y compris Φ elle-même) créer une variable booléenne Ψ.val, et lïnitialiser à 0, • pour toute sous-formule Ψ de Φ (y compris Φ elle-même) créer une variable de type réel notée Ψ.rel_cert, appelée certitude relative de Ψ, et lui assigner la valeur Cert(Ψ) où Cert est la fonction caractérisée comme suit: o Cert(φ) = 0 si φ est une proposition de {pi , ... , pn} o Cert(-iφ) = Cert(φ) o Cert(φi Λ φ2) = sup (Cert(φi), Cert(φ2)) o Cert(φi v φ2) = sup (Cert(φi), Cert(φ2)) o Cert(F[a,bi φ) = Cert(φ) + b o Cert(φi U[a,b] 92) = sup (Cert(φi), Cert(φ2) ) + b o Cert(P[a,b] φ) = Cert(φ) - a o Cert (P[a,>] φ) = Cert(φ) - a o Cert(φi S[a,b] 92 ) = sup (Cert(φi), Cert(φ2) - a) o Cert(φi S[a,>] Φ2 ) = sup (Cert(φi), Cert(φ2) - a) pour chaque sous-formule Ψ de Φ (y compris Φ elle-même) définir une variable réelle notée Ψ.abs_cert destinée à stocker la certitude absolue de Ψ. Selon l'option choisie pour la certitude initiale des formules, pour chaque Ψ sous-formule de Φ, sa variable Ψ.abs_cert associée est initialisée à :
• Option 1 : T_origine - Ψ.rel_cert - Option 2 : sup(T_origine, T_origine - Ψ.rel_cert)
• pour chaque sous-formule Ψ de Φ (y compris Φ elle-même) créer une variable notée Ψ.w de type intervalle, appelée fenêtre de continuation de Ψ.w 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 mémoriser la date de cette acquisition,
• en fonction des valeurs des variables caractéristiques issues de l'acquisition réalisée à l'étape précédente, évaluer la valeur booléenne des propositions et rafraîchir l'instantané I c'est-à-dire assigner la valeur booléenne de p à l.p pour chaque p s {p-i , ..., pn} et assigner la date d'acquisition mémorisée à 1.1.
• pour chaque rafraîchissement de l'instantané I tel que réalisé à l'étape précédente, réaliser pour chaque sous-formule Ψ de Φ (y compris Φ elle-même), et selon un ordre qui soit tel que toute formule soit traitée après ses sous-formules directes, le calcul dit « de continuation » suivant : o Actualiser sa fenêtre de continuation Ψ.w :
• Si Ψ.w est vide : « Si (l.t - Ψ.rel_cert) > Ψ.abs_cert alors Ψ.w devient : [Ψ.abs_cert, l.t - Ψ.rel_cert] puis affecter à Ψ.abs_cert la valeur (l.t - Ψ.rel_cert)
• Si (l.t - Ψ.rel_cert) < Ψ.abs_cert alors Ψ.w reste l'intervalle vide et Ψ.abs_cert reste inchangée » Si Ψ.w n'est pas vide alors :
• Ψ.w devient :] Ψ.abs_cert, l.t - Ψ.rel_cert]
• Affecter à Ψ.abs_cert la valeur (l.t - Ψ.rel_cert) o Si Ψ est purement booléenne appliquer l'algorithme de continuation dédié aux formules purement booléennes qui se caractérise ainsi :
• calculer I.Ψ (valeur dans {0,1 } que l'instantané I donne à Ψ) selon la définition inductive suivante:
• si Ψ est une proposition p alors I.Ψ = l.p
• !.(-.¥!) = l - (I.Ψi) • I .(Ψ1 Λ Ψ2) = I .ΨI * I.Ψ2
• 1.0P1 v Ψ2)= (1.^P1 + I.Ψ2) - (I.Ψi * I.Ψ2)
- Si I.Ψ = 0 et Ψ.val = 1 créer l'intervalle [l.t, l.t] et l'ajouter à la fin de Ψ. LV
• Si I.Ψ = 1 et Ψ.val = 1 alors changer la borne supérieure du dernier intervalle de Ψ.LV de sorte qu'elle devienne l.t,
• Si I.Ψ = 1 et Ψ.val = 0 changer la borne supérieure du dernier intervalle de Ψ.LV à l.t et ouvrir cet intervalle sur cette borne supérieur, - Si I.Ψ = 0 et Ψ.val = 0 ne pas rien faire (Ψ.LV est inchangée)
• Assigner I.Ψ à Ψ.val o Si Ψ n'est pas purement booléenne : • rafraîchir sa fenêtre de continuation Ψ.w de la façon suivante :
• Si Φ.w est vide : o Si (l.t - Φ.rel_cert) > Φ.abs_cert alors Φ.w devient : [Φ.abs_cert, l.t - Φ.rel_cert] puis affecter à Φ.abs_cert la valeur (l.t -
Φ.rel_cert) o Si (l.t - Φ.rel_cert) < Φ.abs_cert alors Φ.w reste l'intervalle vide
• Si Φ.w n'est pas vide alors : o Φ.w devient :] Φ.abs_cert, l.t - Φ.rel_cert] o Affecter à Φ.abs_cert la valeur (l.t - Φ.rel_cert)
• selon l'opérateur de Ψ déduire des intervalles de validité pour Ψ sur la fenêtre Ψ.w en parcourant les listes de validité des sous-formules directes de Ψ ; stocker par adjonction les intervalles produits soit directement dans Ψ.LV si le parcours est chronologique soit dans une liste intermédiaire Ll si le parcours est anti-chronologique ; puis raccorder la liste intermédiaire Ll à la droite de Ψ.LV (dans le cas du parcours anti-chronologique). o exploiter les informations contenues dans la liste de validité de la formule principale Φ et émettre un signal associé.
L'invention concerne aussi un système permettant de générer un détecteur de comportements redoutés spécifiés en logique temporelle linéaire métrique, à mémoire bornée, caractérisé en ce qu'il comporte au moins les éléments suivants : o 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), o Un processeur adapté à exécuter les étapes du procédé selon l'invention en utilisant le(s) paramètre(s) mesuré(s) et la date associée, o Une mémoire adaptée à o mémoriser l'instantané courant o mémoriser les listes de validité LV déterminées par la mise en œuvre du procédé pour la formule principale et ses sous- formules, o une ou plusieurs sorties émettant un signal S correspondant aux informations contenues dans la liste de validité pour la formule principale et émettre ledit signal.
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 1 A un synoptique du procédé selon l'invention et la figure 1 B un exemple d'architecture du système permettant sa mise en œuvre,
• 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,
• Les figures 4, 5, 6A et 6B illustrent le calcul de la liste de validité d'une formule en fonction de celles de ses sous-formules,
• La figure 7A, l'illustration du calcul de la date de certitude d'une formule en fonction de celle de sa sous-formule (pour l'opérateur unaire portant sur le futur), • La figure 7B illustre le calcul de la date de certitude d'une formule en fonction de celle de ses sous-formules (pour l'opérateur binaire portant sur le passé),
• La figure 8A, illustration de la définition d'une zone d'influence prise en compte pour la mise en œuvre du procédé selon l'invention,
• La figure 8B, illustration de l'inutilité des sous-formules directes d'une formule étant donnée la date d'inutilité fixée pour celle-ci, et
• La figure 9 un exemple d'application pour la surveillance du comportement d'un système masse- ressort.
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 défini précédemment au début de la description. La figure 1 A 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 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 1 B est représenté un exemple de système 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 dispositif 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 16i un signal Sc contenant des données permettant, par exemple :
• Soit l'affichage des résultats sur un dispositif d'affichage 17,
• 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 placé sous la surveillance d'un 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 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.
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, robotique).
Un moniteur selon l'invention est constitué notamment de plusieurs éléments qui vont être explicités ci-après. Les notions de processus, de proposition, de liste de validité et d'instantané ont été définies précédemment. 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 4, 5, 6A, 6B. La manière dont une liste de validité peut être déduite d'un processus (au sens défini plus haut) est illustrée de la manière suivante. Pour cela examinons l'information qui est délivrée par un processus à un observateur ou à un capteur ou à un dispositif de surveillance au sein d'un procédé. Pour cet observateur l'information délivrée par un instantané \,- du processus subsiste jusqu'à ce que l'instantané suivant li+i rafraichisse cette information. Autrement dit l'information délivrée par un instantané de date t vaut jusqu'à t' où t' est la date de l'instantané suivant. Si le dernier instantané du processus porte la date z, ce principe permet de définir la validité d'une proposition à toute date de l'intervalle [0, z] et donc une liste de validité sur cette plage. Pour l'illustrer, les étapes de création d'une liste de validité pour la proposition p tel que le ferait un observateur placé face au processus de la figure 2 sont déroulées ci-dessous. Le processus commence en 0 où l'instantané I est rafraîchi. L'observateur remarque que la proposition p est vraie (l.p = 1 ). Il ajoute à la liste de validité de p un premier intervalle soit [0.0, 0.0]. La liste de validité de p est donc ([0.0, 0.0]). Puis l'instantané est rafraichi en 1 , p y est toujours vraie. La valeur date est 1.71. Le procédé prolonge l'intervalle de validité précédent. La liste devient ([0.0, 1.71]).
Au rafraîchissement de l'instantané en 2, p est fausse (l.p = 0). La valeur date l.t est 2.43. Mais n'ayant pas eu d'information entre 1.71 et 2.43 il doit considérer que p était vraie jusque là. Donc l'observateur ou le procédé modifie l'intervalle précédent qui devient [0.0, 2.43 [. Noter que l'intervalle est ouvert à droite, puisqu'en 2.43 la proposition p est fausse. La liste de validité de p devient ([0.0, 2.43 [ ).
Au rafraîchissement de l'instantané en 3, p redevient vraie. La valeur date est 3.27. Or elle était fausse à l'instantané précédent. L'observateur considère que jusque là elle était fausse. Il va donc créer un nouvel intervalle de validité pour p. Ainsi, en 3, la liste de validité de p est ([0.0, 2.43 [, [3.27, 3.27] ). Cet exemple montre qu'étant donné un processus il est possible d'associer à une proposition p une liste d'intervalles qui dénotent les dates où la proposition est vraie. Le procédé utilisé dans cet exemple est formalisé dans la description de l'algorithme ci-après. Algorithme de calcul de la liste de validité d'une proposition
A toute proposition p est associée une variable booléenne p. val et une variable de type liste d'intervalles p.LV (« LV » pour liste de validité). C'est p.LV qui représente la liste de validité pour p. Si I est un instantané, l.t correspond à la date portée par I et l.p à la valeur de vérité que I attribue à la proposition p. L'algorithme est décrit par le diagramme illustré à la figure 3.
La première étape, étape 20, est une étape d'initialisation des valeurs de p. val et de p.LV. La variable p.val est initialisée à faux et la variable p.LV est initialisée par la liste vide. L'étape qui suit, étape 21 , est un état d'attente de rafraîchissement de l'instantané I. Lorsque ce rafraîchissement intervient l'algorithme passe à l'étape 22 où la valeur de l.p est testée. Si la valeur de vérité de l.p est à vrai (vaut 1 ) le procédé teste, étape 23, la valeur de p.val. Si p.val est à vrai alors, étape 24, le procédé prolonge le dernier intervalle de p.LV jusqu'à l.t compris (intervalle fermé sur la valeur l.t). Si la valeur p.val est à faux (vaut 0) alors, étape 25, le procédé ajoute à la fin de p.LV le nouvel intervalle [l.t, l.t].
Si au contraire, à l'étape 22, l.p est faux, alors le procédé teste p.val. Si p.val est à vrai , étape 26, alors le procédé prolonge le dernier intervalle de p.LV jusqu'à l.t non compris (ouvert sur l.t ) (étape 28). Si p.val est à faux, alors le procédé laisse p.LV inchangée (étape 27). A la suite des étapes 24, 25, 27 et 28, le procédé affecte à p.val la valeur de l.p (étape 29). Puis le procédé retourne à l'étape 21 d'attente de rafraîchissement 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é. A partir de l'algorithme de calcul des listes de validité pour les propositions détaillées ci-dessus, le procédé peut générer un moniteur simple, pour un langage restreint aux propositions. Un premier exemple de mise en œuvre du procédé est donné à titre non limitatif, pour un comportement redouté spécifié par une seule proposition. Dans cet exemple, il est proposé de générer un moniteur permettant d'observer le compte en banque d'un client, en posant comme comportement redouté que le solde soit négatif autrement dit que la proposition (solde < 0) soit vraie à un moment donné. Par rapport aux définitions posées le processus est considéré relativement à l'ensemble { (solde < 0) }. Le procédé consiste alors en l'algorithme suivant : 1 - Allouer une variable booléenne notée I. (solde < 0) pour stocker la valeur de (solde < 0) et une variable l.t de type réel pour stocker la date de rafraîchissement
2 - Rafraichir l'instantané I dès que se produit un mouvement de compte (c'est-à-dire évaluer la valeur de vérité de I. (solde < 0) en fonction de la valeur de la variable « solde »)
3 - Appeler l'algorithme de calcul des listes de validité pour la proposition (solde < 0) et étant donné l'instantané I afin d'établir une liste de validité pour la proposition (solde < 0).
4 - Tester la liste de validité de la proposition (solde < 0) (qui vient d'être calculée). a. Si la liste n'est plus vide, c'est-à-dire qu'elle contient un intervalle i, ceci signifie que le comportement redouté, (solde < 0) a été observé. Editer un rapport pour le gestionnaire du compte : (solde < 0) détecté, vraie pour les dates de l'intervalle i. FIN. b. Sinon retour en 2. Ce simple exemple montre que la mémoire utilisée par le procédé est bornée. L'instantané courant est représenté par deux variables I (solde < 0) et l.t , dont les valeurs sont rafraichies à chaque mouvement de compte. Seule la liste de validité de la proposition (solde < 0) est un élément dynamique de la procédure. Comme la procédure s'arrête, par exemple, dès que cette liste comporte un seul intervalle, car l'événement redouté a été observé, nous voyons que le procédé consomme une mémoire bornée. Dans le pire cas nous avons eu besoin de créer les variables l.t, I. (solde < 0) et une variable de type intervalle.
Pour des applications industrielles un langage restreint aux propositions peut être dans certains cas trop limité. La suite de la description introduit un langage permettant de décrire des comportements plus évolués, faisant intervenir plusieurs propositions et permettant de décrire des notions complexes d'ordre, de concomitance, ou d'occurrence dans des délais stricts, sur les propositions.
Spécification formelle des comportements redoutés
Nous donnons d'abord la syntaxe du langage du procédé selon l'invention. Le sens des opérateurs introduits sera explicité ensuite, lors de l'exposé de la sémantique de ce langage. La syntaxe dudit langage formel de spécification des comportements redoutés selon l'invention est la suivante :
• Tout symbole de proposition est une expression du langage selon l'invention • Si Φ est une expression dudit langage, que a et b sont des réels positifs tels que b > a, alors sont aussi des expressions de ce langage : o -i Φ
O F[a,b] Φ
Figure imgf000024_0001
O P[a,>] Φ O ( Φ )
• Si Φi et Φ2 sont deux expressions dudit langage et que a et b deux réels positifs tels que b > a alors sont aussi des expressions de ce langage o Φi Λ Φ2 o Φ-\ v Φ2
Figure imgf000025_0001
o Φi S[a,>] Φ2
En notation BNF (Backus-Naur Form) le langage s'écrit de façon concise :
Φ::= p | -1 Φ | Φ! Λ Φ2 | Φ1 V Φ2 | F[a,b] Φ I P[a,b] Φ I P[a,>] Φ I Φi U[a,b] Φ2 I Φi
S[a,b] Φ2 1 Φ1 S[a,>] Φ2 1 ( Φ ) où p dénote tout symbole de proposition, a, b dénotent des réels positifs tels que b > a, la signification des opérateurs mentionnés étant donnée ci-après.
Dans la suite de la description, une expression de ce langage sera appelée une formule. Les parenthèses sont utilisées pour désambiguïser une formule. En effet, si l'on écrit Φi Λ Φ2 U[a,b] Φ3 on ne sait s'il faut lire (Φ1 Λ Φ2 ) U[a,b] Φ3 ou bien lire Φ1 Λ (Φ2 U[a,bi Φs)- Or ces formules ne sont pas équivalentes, d'où l'importance des parenthèses. Quelques exemples de formules :
Figure imgf000025_0002
• P3 U[O, 12] ((-i (P[1 43,5 64] (pi Λ-i p2 )) Λ (-1 F[243, 785] P2))
L'opérateur → (implication), peut aussi être utilisé puisqu'il n'est qu'une abréviation exprimable dans le langage. En effet Φi → Φ2 est une abréviation
Figure imgf000025_0003
L'ensemble des sous-formules d'une formule est donné par la fonction SF définie de la façon suivante : • SF(p) = {p} (pour une proposition p il n'y a qu'elle même)
Figure imgf000026_0001
• SF(Φ1 Λ Φ2) = { Φ! Λ Φ2 } uSF(Φ1) uSF(Φ2)
• SF(Φ1 v Φ2) = { Φi v Φ2 } u SF(Φ1) u SF(Φ2)
• SF(F[a,b] Φ) = { F[a,b] Φ} uSF(Φ) • SF(P[a,b] Φ) = { P[a,b] Φ } U SF(Φ)
• SF(P[a,>] Φ) = { P[a,>] Φ } USF(Φ)
• SF(Φi U[a,b] Φ2) = { Φi U[a,b]Φ2} uSF(Φi) USF(Φ2)
• SF(Φ! S[a,b] Φ2) = { Φi S[a,b]Φ2} USF^1) USF(Φ2)
• SF(Φ1 S[a,>] Φ2) = { Φi S[a,>2} USFIΦO USF(Φ2) • SF((Φ)) = SF(Φ)
Par exemple : SF(-. p) = { -.p} uSF(p) = { -.p} u{ p} = { -.p, p}
SF ( F[243, 785] (Pi Λ-i p2)) = { F[243, 785] (pi Λ~i P2), (pi Λ~i p2), ->p2, Pi , Ç>2 }
Les sous-formules directes d'une formule sont celles placées directement sous son opérateur. Par exemple, pour -iΦ il s'agit de Φ. Pour Φi U[a,b] Φ2 il s'agit de Φ1 et Φ2.
Une formule du langage est dite purement booléenne si : • c'est une proposition, ou bien
• son opérateur est booléen (donc dans {-I,V,Λ,→}) et toutes ses sous-formules sont aussi purement booléennes.
Hauteur d'une formule La hauteur d'une formule du langage défini ci-avant est donnée par une fonction h définie de la façon inductive suivante :
• h(p) = 0 (les propositions sont de hauteur 0)
• h(op Φ) = h(Φ) +1 où op est un des opérateurs unaires du langage
• h(Φi op Φ2) = sup (h(Φ), h(Φ)) + 1 où op est un des opérateurs binaires du langage Exemple : h (-1 F1112] (pi Λ p2)) = h (F1112] (pi Λ p2)) + 1 = h ((P1 Λ p2)) + 1 +1 = (SUp(Ii(PO1Ii(P2)) + 1 ) + 2 = sup(0,0)+1 +2= 0 + 3 = 3
Sémantique du langage de spécification formelle des comportements redoutés
Sémantique intuitive :
• L'opérateur -. est la négation. ->Φ est vraie à une date t si et seulement si Φ est fausse à cette date t.
• L'opérateur Λ est appelé conjonction. La formule Φi Λ Φ2 n'est vraie à une date t que si Φi et Φ2 sont toutes deux vraies à cette date t.
• L'opérateur v est appelé disjonction. La formule Φi v Φ2 est vraie à une date t si Φ-i ou Φ2 est vraie à cette date t.
• L'opérateur F[a,b] porte sur le futur. Cet opérateur signifie intuitivement « dans le futur, entre a et b » ou encore « il y aura entre a et b ». Plus rigoureusement la formule F[a,b] Φ est vraie à une date t si et seulement s'il existe une date entre t+a et t+b où Φ est vraie.
• L'opérateur P[a,b] porte sur le passé. Cet opérateur signifie intuitivement « dans le passé, entre a et b » ou encore « il y a eu entre a et b ». Plus rigoureusement la formule P[a,t>] Φ est vraie en t si et seulement s'il existe une date entre t-b et t-a où Φ est vraie.
• L'opérateur P[a >] porte sur le passé. Cet opérateur signifie intuitivement : « au-delà de -a dans le passé ». Plus rigoureusement la formule P[a,>] Φ est vraie en t si et seulement s'il existe une date entre 0 et t-a où Φ est vraie.
• L'opérateur U[a,t>] porte aussi sur le futur (le « U » viens de l'expression anglo-saxonne « Until »). Cet opérateur signifie intuitivement : « Φ2 sera vraie entre a et b et Φi sera partout vraie entre temps ». Plus rigoureusement la formule Φi U[a,b] Φ2 est vraie en t si et seulement s'il existe une date t' entre t+a et t+b où Φ2 est vraie et que Φi est partout vraie dans l'intervalle [t, t'[.
• L'opérateur Sta,b] porte aussi sur le passé (le « S » viens de l'expression anglo-saxonne « Since »). Cet opérateur signifie : « Φ2 sera vraie vers le passé entre -b et -a et Φi sera partout vraie entre temps ». Plus rigoureusement la formule Φi S[a,b] Φ2 est vraie en t si et seulement s'il existe une date t' entre t-b et t-a où Φ2 est vraie et que Φ1 est partout vraie dans l'intervalle ]t', t].
• L'opérateur S[a >] porte aussi sur le passé. Cet opérateur signifie : « Φ2 sera vraie vers le passé au-delà de -a et Φ1 sera partout vraie entre temps ». Plus rigoureusement la formule Φ1 S[a,>] Φ2 est vraie en t si et seulement s'il existe une date t' entre 0 et t-a où Φ2 est vraie et que Φ1 reste vraie dans l'intervalle ]t', t]. Sémantique formelle : L'objet de cette définition est de donner un sens mathématique à la notion de validation d'une formule par un processus π (processus au sens défini ci- avant) à une date t quelconque. La notation π,t |= Φ se lit : « le processus π valide Φ à la date t » , et est définie ainsi :
• π,t |= p ssi p est dans l'ensemble de propositions de l'instantané π(k) où k est le plus grand rang des rangs d'instantanés dont les dates sont inférieures à t (t est supérieure ou égale à la date portée par l'instantané π(k) et strictement inférieure à la date de l'instantané π(k+1 ) ).
• π,t |= -1 Φ ssi π,t |≠ Φ (lire : π,t ne valide pas Φ) . π,t |= Φ1 Λ Φ2 ssi π,t |= Φ-i et π,t |= Φ2
. π,t |= Φ1 v Φ2 ssi π,t |= Φ-i ou π,t |= Φ2
• π,t |= F[a:b] Φ ssi il existe une date t' de [t+a, t+b] telle que π,t' |= Φ
• π,t |= P[a,b] Φ ssi il existe une date t' de [t-b, t-a] telle que π,t' |= Φ • π,t |= P[a,>] Φ ssi il existe une date t' de [0, t-a] telle que π,t' |= Φ . π,t |= Φi U[a,b] Φ2 ssi il existe une date t' de [t+a,t+b] telle que π,t'
|= Φ2 et pour toute date t" de [t,t'[ π,t" |= Φ-i
. π,t |= Φ1 S[a,b] Φ2 ssi il existe une date t' de [t-b, t-a] telle que π,t' |= Φ2 et pour toute date t" de ]t',t] π,t" |= Φ1
. π,t |= Φ1 S[a,>] Φ2 ssi il existe une date t' de [0, t-a] telle que π,t' |= Φ2 et pour toute date t" de ]t',t] π,t" |= Φ1
La notion de liste de validité précédemment exposée était limitée aux propositions. Sans sortir du cadre de l'invention, cette approche peut être étendue à toute expression de notre langage (les propositions 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.
Correspondance entre opérateurs du langage et opérations sur les listes de validité
II a été précédemment exposé comment se constituait une liste de validité pour des propositions. Comme les formules complexes sont construites à partir des propositions 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 Φ1 Λ Φ2 résulte de la combinaison (particulière à l'opérateur Λ) des listes de validité de Φ1 et de Φ2. Nous allons donc établir une sorte d'algèbre sur les listes de validité.
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. Premier calcul des listes de validité (valable uniquement pour les formules purement booléennes) :
Pour calculer la liste de validité des formules purement booléennes l'algorithme de calcul utilisé est similaire à celui exposé pour les propositions et ne nécessite qu'une adaptation mineure. De même que pour une proposition p nous avions défini les variables booléennes p. val et l.p, pour une formule Φ purement booléenne nous définissons les variables booléennes Φ.val et I.Φ:
• Φ.val est une variable booléenne associée à Φ. Elle est initialisée à 0. • I.Φ est une variable booléenne qui représente la valeur que l'instantané I attribue à Φ. Son calcul est défini de la manière inductive suivante: o Si Φ est une proposition p alors I. Φ est l.p o Si Φ est la formule -iΦ-i alors I.Φ vaut la négation de valeur de vérité de I. Φi. Formellement : I. (-1Φ1) = 1 - I.Φi o Si Φ est Φ1 Λ Φ2 alors I.Φ vaut 1 si I.Φ1 et I.Φ2 valent tous deux 1 , 0 sinon. Formellement : l.( Φ1 Λ Φ2) = I.Φ-i * I.Φ2 o Si Φ est Φ1 v Φ2 alors I.Φ vaut 0 si I.Φ1 et I.Φ2 valent tous deux 0, 1 sinon. Formellement : l.( Φ1 v Φ2) = (I.Φ-i + I.Φ2 ) - (I.Φ1 * I.Φ2) ).
Par exemple considérons pi v p2. Supposons un instantané I tel que l.p-j = 0 et Lp2 = 1. Alors 1.(P1 v p2) = Lp1 + Lp2 - (Lp1 * Lp2) = 0 + 1 - (O M ) = L
Moyennant ces définitions le calcul des listes de validité d'une formule purement booléenne est similaire à celui exposé pour une proposition. Nous allons donc pouvoir étendre ce dernier pour traiter non seulement les propositions mais aussi toutes les formules purement booléennes. Il suffit simplement d'appeler au préalable le calcul sur les sous-formules afin que toutes les variables en jeu soient définies (par exemple pour Φ-i Λ Φ2 , on doit d'abord faire le calcul pour Φï et pour Φ2 de telle sorte que I.Φi et I.Φ2 soient définies). L'algorithme généralisé pour les purement booléennes (donc aussi les propositions) est donc le suivant :
Algorithme de calcul de la liste de validité d'une formule purement booléenne Φ :
• Φ.val est initialisée à 0
• Φ.LV est initialisée à la liste vide
• A chaque rafraîchissement de l'instantané I faire : o calculer I.Φ comme indiqué plus haut (on suppose que les sous-formules de Φ ont été traitées avant) o Si I.Φ = 0 et Φ.val = 1 créer l'intervalle [l.t, l.t] et l'ajouter en fin de Φ.LV o Si I.Φ = 1 et Φ.val = 1 alors changer la borne supérieure du dernier intervalle de Φ.LV de sorte qu'elle devienne l.t : si (I, Ib, ub ,u) est ce dernier intervalle alors il devient (I, Ib, l.t ,u) o Si I.Φ = 1 et Φ.val = 0 alors changer la borne supérieure du dernier intervalle de Φ.LV à l.t et ouvrir cet intervalle sur cette borne supérieur : si (I, Ib, ub ,u) est ce dernier intervalle alors il devient (I, Ib, l.t ,0) o Si I.Φ = 0 et Φ.val = 0 ne pas rien faire (Φ.LV est inchangée) o Assigner I. Φ à Φ.val
Second calcul des listes de validité (valable pour toute formule mais moins efficace que le premier si appliqué à une purement 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.Φ) et la valeur qu'elle avait auparavant (soit Φ.val), 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-formules directes, composition qui est fonction de l'opérateur. Nous allons donner ci- dessous quelques intuitions de cette composition propre à chaque opérateur. Ces intuitions ne présage 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 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 de l'opérateur -i.
La figure 4 illustre le calcul de la liste de validité de -iΦ connaissant celle de Φ. Le principe est le suivant : deux intervalles successifs i et i+1 de Φ donnent lieu à un intervalle pour -iΦ qui s'insère entre i et i+1. (Voir Annexe 1 pour une description plus détaillée).
Cas de l'opérateur Λ.
La liste de validité de Φi Λ Φ2 est fonction de celles de Φi et de Φ2. Le principe est le suivant : si h est un intervalle de Φi et i2 un intervalle de Φ2 et que h n i2 ≠ 0, alors h n i2 est un intervalle de Φ^ Λ Φ2. (Voir Annexe 1 pour une description plus détaillée).
Cas de l'opérateur v. La liste de validité de Φ-ιv Φ2 est fonction de celles de Φi et de Φ2. Le principe est le suivant. Tout d'abord nous faisons un choix de sens de parcours des listes de validité des listes de Φ-i et de Φ2. Nous verrons qu'il est plus judicieux de partir de la fin des listes. Nous faisons donc ce choix. Soient J1 et i2 les derniers intervalles de respectivement Φi.LV et de Φ2.LV. Nous faisons un premier choix entre il et i2 qui consiste à choisir celui 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.u = 1 et j.u = O). Si ce choix n'est pas possible car ils vont tous deux aussi loin dans le futur (c'est-à-dire J1-Ub = i2.ub et J1. u = 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ù ii ressortirait vainqueur de ce choix. Nous faisons entrer J1 dans la liste de validité (Φiv Φ2).LV de ΦÏV Φ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 < ii ou bien qui chevauche J1 à gauche. Nous l'assignons à i2 (même si i vaut Nil). Nous assignons le prédécesseur de ii à ii. Puis nous réitérons le procédé en refaisant un choix entre les nouveaux U et i2 et ainsi de suite jusqu'à épuiser les listes Φi.LV et Φ2.LV. Ainsi, de proche en proche, et selon un algorithme linéaire, nous construisons la liste de validité de Φ-ιv Φ2.
Cas de l'opérateur F[a,b].
La figure 5 illustre la manière dont un intervalle de F[a,b]Φ est produit en fonction d'un intervalle existant dans la liste de validité de Φ. Si i est un intervalle de Φ on déduit que l'intervalle (i Θ [-b, -a]) contient les dates de validité pour F[a,b]Φ selon la donnée de i. En effet choisissons une date t de i Θ [-b, -a]. Est-ce que Φ est effectivement vraie dans [t+a, t+b] ? Autrement dit est-ce que [t+a, t+b] coupe i ? Supposons que cela ne soit pas le cas. Alors c'est que nous aurions [t+a, t+b] < i ou bien i < [t+a, t+b]. Considérons le cas [t+a, t+b] < i. Pour qu'il soit vérifié il n'y a que deux cas de figure. Montrons qu'il y a contradiction dans les deux cas :
• Soit nous aurions t+b < i.lb, donc t < i.lb - b donc t € i Θ [-b, -a]. Contradiction.
• Soit nous aurions t+b = i.lb et i.l = 0 car [t+a, t+b] est fermé à droite sur t+b. Sachant que i Θ [-b, -a] vaut par définition (i.l, i.lb - b, i.ub - a, i.u), avec i.lb = t + b, nous aurions alors i Θ [-b, -a] = (U, (t + b) - b, i.ub - a, i.u) = (U, t, i.ub - a, i.u). Ainsi t serait dans ce cas la borne inférieure de i Θ [-b, -a]. Comme nous avons pris t dans i Θ [-b, -a], cela signifie que i Θ [-b, -a] possède sa borne inférieure, donc qu'il est fermé sur celle-ci. Autrement dit cela implique (i Θ [-b, -a]).l = 1.
Comme par définition (i Θ [-b, -a]). I est U nous devrions donc avoir U = 1. Contradiction.
Le cas i < [t+a, t+b] mène de la même manière à des contradictions. Ceci montre que (i Θ [-b, -a]) contient bien les dates de validité pour F[a,b] Φ selon la donnée de i et par conséquent qu'il est un intervalle à adjoindre dans la liste de validité de F[a,b] Φ. (Voir Annexe 1 pour un calcul plus détaillé).
Cas de l'opérateur U[a,b]- Nous distinguons selon que a > 0 ou a = 0. Cas a > 0.
Rappelons que Φ-i U[a,b] Φ2 est valide en une date t si Φ2 est vraie à une date t' de [t+a,t+b] et que Φ1 est vraie partout sur [t,t'[. Il résulte de ceci qu'un intervalle H de Φ1 et un intervalle I2 de Φ2 tels que H] n i2 = 0 (rappel : h] est le fermé à droite de h) ne peuvent donner lieu à un intervalle pour Φ-i U[a,b] Φ∑- En effet si h] n i2 = 0 cela signifie qu'il existe une séparation entre h] et i2 par conséquent Φ-i ne peut être partout vraie entre une date de i-ι] jusqu'à une date de i2. Donc ii] n i2 ≠ 0 est une condition nécessaire pour que ii et i2 génèrent un intervalle pour Φ-, U[a,b] Φ2 - Considérons donc, comme sur la figure 6A, deux intervalles h et i2 tels que J1] n i2 ≠ 0. Appelons i cet intervalle J1] n i2. Considérons l'intervalle j = i Θ [-b, -a]. D'après ce que nous avons vu précédemment pour l'opérateur F[a,b], si nous choisissons une date t dans j il est clair qu'il existe une date t' de [t+a, t+b] qui soit dans i. Comme toutes les dates de i sont aussi des dates de i2 (puisque i = h] n i2), cela signifie qu'en t' Φ2 est vraie. Nous en déduisons que si t est choisie dans j alors il existe une date t' de [t+a, t+b] où Φ2 est vraie.
Choisissons maintenant t dans j n J1]. Alors la date t, en tant que date de j, nous garantit comme vu ci-dessus qu'il existe une date t' de [t+a, t+b] où Φ2 est vraie. Rappelons que de plus t' est aussi une date de i.
Ceci implique que t' est une date de H] (puisque i = i-i] n i2). Par ailleurs en tant que date de j n J1] la date t est aussi une date de J1]. Finalement, pour synthétiser, t et t' sont des dates de h] et t' est dans [t+a, t+b]. Gomme a > 0 alors t < t'. Donc t est dans h et t' dans J1]. C'est-à-dire que t' est ou bien dans h ou bien n'est pas dans J1 mais est J1. ub. Dans les deux cas l'intervalle ii (qui est continu) assure donc une continuité de validité de Φi sur [t, t'[. Comme Φ2 est vraie en t', il s'en suit que (Φi U[a,b] Φ2) est valide en t. Pour conclure, quand a>0, l'intervalle H] n (i-i] n i2 Θ [-b, -a]) dénote les dates où (Φ1 U[a,b] Φ2) est vraie d'après la donnée de ii et i2 (il est éventuellement vide si j < h ). Cet intervalle sera donc à adjoindre à la liste (Φ1 U[a,b] Φ2).LV de validité de Φ1 U[a,b] Φ2-
Cas a = 0 (donc cas de : Φ1 U[o,b] Φ2)
Dans le cas où a vaut 0, l'ensemble i2 est lui-même un ensemble de dates qui valident Φ1 U[a,b] Φ2- L'intervalle i2 doit donc aussi être adjoint à (Φ1 U[a,b] Φ2).LV. Mais si par ailleurs il existe ii de Φ-i.LV qui chevauche i2 par la gauche comme sur la figure 6B, les dates de ii qui sont aussi dans i2 © [-b, 0] valident Φ-i U[0,b] Φ2- Finalement s'il existe un tel M qui chevauche i2 par la gauche c'est donc l'intervalle (h n (i2 Θ [-b, 0])) u i2 nous devons adjoindre au lieu de i2 seulement.
Dans l'Annexe 1 un calcul précis et formalisé a vaut 0 ou que a > 0. Cas de l'opérateur S[a,b]. Symétrique à U[a,b] dans le passé.
Cas de l'opérateur P[a,>]. La liste de validité de P[a,>] Φ ne dépend que du premier intervalle de la liste de validité de Φ. Si celui-ci existe et est de la forme [u,v] alors la liste de validité de P[a,>] Φ est composé de l'unique intervalle [u+a,∞[.
Cas de l'opérateur S[a,>]. Considérons la formule Φ-i S[a,>] Φ2 . Là encore pour que \-\ de Φi et i2 de Φ2 produisent un intervalle pour Φ-i S[a,>] Φ2 il faut que i2 n [J1 ≠ 0. Supposons que ce soit le cas. Supposons que i2 soit [u,v]. Posons k = [u+a, ∞[. Alors k n "h est un intervalle de validité pour Φ-i S[a,>] Φ2.
Dans les descriptions ci-dessus nous n'avons donné qu'une intuition 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 nous donnons une description précise et complète (en pseudo- code) 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 comportement redouté se réduisait à une proposition, soit « solde <0 ». Le procédé reposait sur le constat que détecter l'occurrence du comportement redouté « solde <0 » équivaut à calculer la liste de validité attachée à la proposition « solde <0 » et à tester si cette liste est vide ou non. Si elle ne l'est pas, cela signifie que « solde <0 » est vraie à certaines dates et donc que le comportement redouté a eu lieu. Ensuite nous avons introduit un langage plus riche pour exprimer des propriétés plus évoluées. Pour étendre le procédé à ce langage il fallait alors disposer d'un calcul permettant de calculer la liste de validité de n'importe quelle formule exprimable dans ce langage de sorte que l'on puisse 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 calcul 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éfinies et aient été calculés avant que l'on procède au calcul de a+b. Cette contrainte laisse 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
Schématiquement l'algorithme récursif est le suivant (il prend en argument une formule, nommons là Φ) :
A1 - Si Φ est formule purement booléenne, calcul de la liste de validité selon l'algorithme propre à ce type de formule.
A2 - Sinon identification de l'opérateur de la formule Φ,
A2.1 - Appel (récursif) du présent algorithme sur Φi la première sous- formule directe de Φ
A2.2 - Si Φ possède une deuxième sous-formule directe Φ2 appel récursif sur Φ2
A2.3 - Calcul de la liste de validité de Φ en fonction de celles de Φi (et Φ2) et selon l'opérateur identifié A3 - FIN Le procédé, à chaque rafraîchissement de l'instantané I, appelle cet algorithme avec comme argument la formule principale Φ.
Selon un autre mode de réalisation, le calcul de la liste de validité fait appel à un algorithme non récursif se basant sur la hauteur des formules. Schématiquement l'algorithme est le suivant (Φ est la formule principale) : B1 -soit k = 0
B2 - « tant que » k < h(Φ) faire B2.1 - pour toute sous-formule ψde Φ telle que h(ψ) = k faire : a) Si Ψ est formule purement booléenne, calcul de sa liste de validité selon l'algorithme propre à ce type de formule b) Sinon calcul de la liste de validité de Ψ en fonction de sa ou ses formules directes (qui ont forcément été déjà traitées puisque de hauteurs inférieures)
B2.2 - k = k + 1
B2.3 - retour du « tant que » 2. B3 - FIN.
Pour le procédé cet algorithme est appelé à chaque rafraichissement de l'instantané I, sans argument.
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 Φ dans une liste croissante selon la fonction h (c'est-à-dire de sorte que si Ψi et Ψ2 sont deux formules consécutives de cette liste on ait soit h(Ψ0 < h(Ψ2) soit h(Ψ0 = h(Ψ2)). Ensuite, à chaque rafraichissement de l'instantané on parcoure cette liste à partir du début et pour chaque formule rencontrée on procède au calcul de ses intervalles de validité. A chaque formule rencontrée nous sommes sûrs que les sous-formules ont déjà été calculées puisque, de hauteurs inférieures, elles ont été parcourues avant la formule courante.
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 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 (certitude, 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 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é.
Principe de certitude : Ce principe consiste à déterminer, à tout moment et pour toute formule du langage, la portion de sa liste de validité qui restera inchangée, quoique qu'il advienne par la suite.
Pour rendre opérationnel ce principe, le procédé définit une fonction, appelée Cert, qui prend en argument une formule et renvoie un nombre réel et ce de telle sorte que si I est le dernier instantané alors l.t - Cert(Φ) détermine la dernière date à laquelle Φ est certaine. Se pose alors la question de la première date à partir de laquelle Φ est certaine. D'après ce qui précède cela devrait être T_origine - Cert(Φ) puisque par convention le premier rafraichissement est effectué à T_originen, date de début d'observation. Mais il se peut alors que T_origine - Cert(Φ) soit antérieur à T_origine (tout simplement lorsque Cert(Φ) est strictement supérieur à 0). Nous sommes alors devant deux options. Soit nous acceptons, option 1 , de calculer des dates de validité antérieurement à T_origine, dans ce cas la fenêtre de certitude sera, pour toute formule Φ, l'intervalle [T_origine - Cert(Φ), l.t - Cert(Φ)]. Soit, option 2, nous n'acceptons pas de calculer des dates de validité antérieurement à T_origine (nous affirmons le caractère de T_origine comme date d'origine absolue), alors dans ce cas la fenêtre de certitude sera, pour toute formule Φ, l'intervalle [sup(T_origine, (T_origine - Cert(Φ))), l.t - Cert(Φ)]. Quoique les deux options soient possibles, dans la suite de la présentation nous opterons pour l'option 2 où [sup(T_origine, (T_origine - Cert(Φ))), l.t - Cert(Φ)] définit à tout moment l'intervalle de certitude de Φ.
Pour une proposition p, sa valeur peut être déterminée jusqu'à la date du dernier instantané. Il est donc clair que la liste de validité d'une proposition est complètement déterminée, figée, sur la plage temporelle [T_origine, l.t] où I est le dernier instantané. Il faut donc poser Cert(p) = 0 pour que [sup (T_origine, T_ohgine - Cert(Φ)), l.t - Cert(Φ)] soit l'intervalle de certitude de p. En effet, en posant Cert(p) = 0, nous avons bien [sup (T_origine, T_origine - Cert(Φ)), l.t - Cert(Φ)] = [sup(T_origine, T_ohgine - 0), l.t - 0] = [T_origine, l.t].
Avant de généraliser à tous les opérateurs et à toute formule, ce principe est présenté dans un premier temps avec la formule F[a,bi P, car cela est particulièrement intuitif. Considérons une date t quelconque. Si nous voulons savoir si F[a,b] P est vraie ou fausse en t, conformément à la sémantique définie pour l'opérateur F[a,b] il faut que nous connaissions la valeur de p sur tout l'intervalle [t+a, t+b]. Or pour connaître p sur [t+a, t+b] il faut que la liste de validité de p soit déterminée et figée au moins jusqu'à t+b. Si nous renversons ce raisonnement, supposons que p soit certaine jusqu'à une date r. Alors F[a,b]P ne peut être déterminée que jusqu'à r - b. En effet considérons une date t < r - b. Donc t + b < r. Est-ce que la validité de F[a b] p peut-être déterminée en t ? D'après la définition de cet opérateur cela peut être déterminé si la validité de p est certaine sur toute date de [t+a, t+b]. Or c'est le cas puisque ayant t+b < r et a < b, il suit que toutes les dates de p sur [t+a, t+b] sont inférieures à r et donc la validité de p connues pour chacune. Pour généraliser à F[a,t>] Φ, si Φ est certaine jusqu'à disons r alors F[a,b] Φ n'est certain que jusqu'à r - b. La figure 7 A illustre ce principe, la validité de F[a,b] Φ est certaine en ti et incertaine en t2 car [t2+a, t2+b] empiète sur une zone de validité non déterminée pour Φ.
Pour formaliser cette idée nous définissons la fonction Cert qui prend en argument une formule Ψ et renvoie un nombre réel de telle sorte que si l.t est la date du dernier instantané alors l.t - Cert(Ψ) est la plus grande date jusqu'à laquelle Ψ soit certaine. Il suit immédiatement que Cert(p) vaut 0 pour toute proposition p. Maintenant examinons le cas de la formule F[a,b] Φ, c'est-à-dire déterminons la valeur de Cert(F[a b] Φ). Par hypothèse l.t - Cert(Φ) donne la plus grande date de certitude pour Φ. D'après ce que nous avons vu, F[a>b] Φ n'est donc certaine que jusqu'à (l.t - Cert(Φ)) - b. Or cette date est censée être l.t - Cert(F[a b] Φ). Donc nous avons : l.t - Cert(F[a,b] Φ) = l.t - Cert(Φ) - b « - Cert(F[a,bi Φ) = - Cert(Φ) - b <=> Cert(F[a,b] Φ) = Cert(Φ) + b
Finalement : Cert(F[a b] Φ) = Cert(Φ) + b. La fonction de certitude Cert d'une formule se définit de façon inductive en partant des propositions pour lesquelles la fonction Cert est connue (comme nous l'avons vu elle vaut O), pour aller ensuite vers les formules plus complexes. Au final cette fonction prend en argument une formule et renvoi un nombre réel (ce nombre ne dépend que de la formule et peut donc être calculé statiquement). Comme il a été dit cette fonction est définie de telle sorte que [sup(T_origine, T_origine
- Cert(Φ)), t - Cert(Φ)] soit l'intervalle de certitude de Φ, lorsque l.t est la date portée par le dernier instantané observé I. En généralisant à tous les opérateurs nous obtenons la définition inductive suivante de la fonction Cert:
• Cert(Φ) = 0 si Φ est une proposition
• Cert(^Φ) = Cert(Φ)
• Cert(Φi Λ Φ2) = sup (Cert(Φi), Cert(Φ2))
• Cert(Φ! v Φ2) = sup (Cert(Φi), Cert(Φ2)) • Cert(F[a,b] Φ) = Cert(Φ) + b
• Cert(Φi U[a,b]Φ2) = sup (Cert(Φi), Cert(Φ2)) + b
• Cert(P[a,b] Φ) = Cert(Φ) - a
• Cert (P[a,>] Φ) = Cert(Φ) - a
• Cert(Φ1 S[a,b] Φ2 ) = sup (Cert(Φi), Cert(Φ2) - a) • Cert(Φ1 S[a,>] Φ2 ) = sup (Cert(Φi), Cert(Φ2) - a)
Expliquons la certitude de (Φi U[a,b] Φ2), avec a > 0, qui n'est pas triviale. On se reportera à la figure 6A. Cette figure illustre la façon dont un intervalle de Φ2 et un intervalle de Φ1 donnent lieu à un intervalle pour Φ-, U[a!b] Φ2 . Sur la figure 6A, nous avons besoin que J1] n i2 soit certain. Or la certitude d'une intersection est donnée par la plus petite date des certitudes attachées aux intervalles qui interviennent. Or nous ne sommes certains de ii que jusqu'à l.t
- Cert(Φi), de i2 que jusqu'à l.t - Cert(Φ2). La plus petite des deux est donc donnée par l.t - sup(Cert(Φi), Cert(Φ2)). Ensuite le calcul de (h] n i2) Θ [-b, - a] ne peut être certain (revoir les arguments avancés pour F[a,b]) que jusqu'à (l.t - sup(Cert(Φi), Cert(Φ2))) - b soit l.t - (sup(Cert(Φi), Cert(Φ2)) + b). Et finalement h] n j que jusqu'à : l.t - sup ( Cert(Φ1), (sup(Cert(Φ1), Cert(Φ2)) + b) ) Montrons que cela est équivalent à sup(Cert(Φi), Cert(Φ2)) + b qui est la valeur de Cert(Φi U[a,b]Φ2) dans la définition. Deux cas : • Cas Cert(Φi) > Cert(Φ2). o Alors d'une part nous avons :
- l.t - sup ( Cert(Φ1), (sup(Cert(Φi), Cert(Φ2)) + b) )
- = l.t - sup ( Cert(Φi), Cert(Φi) + b) )
Figure imgf000043_0001
o Et d'autre par
- sup(Cert(Φ1), Cert(Φ2)) + b
Figure imgf000043_0002
o Donc l'égalité recherchée • Cas Cert(Φi) < Cert(Φ2). o Alors d'une part:
- l.t - sup ( Cert(Φi), (sup(Cert(Φi), Cert(Φ2)) + b) )
- = l.t - SUp ( CeIt^1), (Cert(Φ2) + b) )
- = Cert(Φ2) + b o Et d'autre part
- sup(Cert(Φ1), Cert(Φ2)) + b
- Cert(Φ2) + b o Donc l'égalité recherchée d'où Cert(Φ1 U[a,b] Φ2) = sup (Ceιt(Φi), Cert(Φ2)) + b. Pour Cert(Φ1 S[a,b] Φ2) la justification est illustrée par la figure 7B où l'on montre que sup(Cert(Φ1), Cert(Φ2) -a) convient. Pour les autres formules, la fonction Cert s'explique par des raisonnements analogues.
En pratique, à chaque sous-formule Φ de la formule principale, nous associerons une variable de type réel notée Φ.rel_œrt , destinée à stocker la valeur de Cert(Φ). Un mode de calcul possible de Φ.rel_cert est le suivant, illustré par l'algorithme récursif calcul_rel_cert:
calcul_rel_cert (Φ) C1 - Si Φ est : C1.1 - une proposition p alors Φ.rel_cert = 0
C1.2 - -Φι alors Φ.rel_cert = calcul_rel_cert (Φi)
C1.3 - Φi Λ Φ2 alors Φ.rel_cert = sup(calcul_rel_cert(Φi), calcul_rel_cert(Φ2) ) C1.4 - Φi v Φ2 alors Φ.rel_cert = sup (calcul_rel_cert(Φi), calcul_rel_cert(Φ2))
C1.5 - F[a,b]Φ alors Φ.rel_cert = calcul_rel_cert(Φ) + b
C1.6 - Φ-i U[a,b]Φ2 alors Φ.rel_cert = sup (calcul_rel_cert(Φi), calcul_rel_cert(Φ2) ) + b C1.7 - P[a,b] Φ alors Φ.rel_cert = calcul_rel_cert(Φ) - a
C1.8 - P[a,>] Φ alors Φ.rel_cert = calcul_rel_cert(Φ) - a
C1.9 - Φi S[a,b] Φ2 alors Φ.rel_cert = sup (calcul_rel_cert(Φi), calcul_rel_cert(Φ2) - a)
C1.10 - Φi S[a,>] Φ2 alors Φ.rel_cert = sup (calcul_rel_cert(Φ-ι), calcul_rel_cert(Φ2) - a)
C2 - FIN
Pour le procédé, chaque sous-formule Φ de la principale (principale comprise) se voit attribuée une variable réelle nommée Φ.abs_cert destinée à stocker la date de certitude absolue de Φ. Conformément à ce nous avons dit sur la date de certitude initiale, l'initialisation dépend d'une option. Pour Φ cette variable Φ.abs_cert sera initialisée soit à (option 1 ) T_origine -
Φ.rel_cert soit à (option 2) sup(T_origine, T_origine - Φ.rel_cert). La certitude initiale s'interprète comme la première date à partir de laquelle la validité d'une formule sera définie. Quelques exemples :
• Considérons -i(P[3,5] p) avec T_origine = 0. Nous avons (~i(P[3,5] p)).rel_cert = (P^51 p).rel_cert = p.rel_cert - 3 = 0 - 3 = -3. Donc (-i(P[3,5i p)).abs_cert sera initialisée par (option 2) sup(0, 0 - (- 3)) = sup(0, 3) = 3 ou bien par (option 1 ) 0 - (- 3) = 3. Autrement dit, quelle que soit l'option choisie sur la certitude initiale, pour cette formule -i(P[3,5j p) et pour un processus commençant à la date 0, on ne commencera à faire des calculs de validité qu'à partir de la date 3. • Considérons F[3,5] p avec T_origine = 0. (F^5] p).abs_cert sera initialisée selon l'option 2 par sup(0,0 - 5) = sup(0,-5) = 0 ou par, selon l'option 1 , 0 - 5 = -5. Autrement dit, pour cette formule et pour un processus commençant à la date 0, selon l'option 2 on ne commencera à faire des calculs de validité qu'à partir de la date 0, ou bien, selon l'option 1 , à partir de la date -5.
Principe de continuation
Du principe de certitude précédemment développé, découle le principe de continuation qui gouverne les algorithmes détaillés ci-avant de calcul des listes de validité. Supposons que I soit le dernier instantané, la liste de validité d'une formule Φ a donc été établie jusqu'à l.t - Φ.rel_cert (sa zone de certitude étant [sup(T_origine, T_origine - Φ.rel_cert), l.t - Φ.rel_cert]). Par définition ceci assure que la liste de validité de Φ sur [sup(T_origine, T_origine - Φ.rel_cert), l.t - Φ.rel_cert] ne peut être modifiée par la suite. Cette portion est donc un résultat acquis qui ne doit plus être recalculé par la suite. Si donc arrive un nouvel instantané I' après l'instantané I le calcul des intervalles pour Φ ne doit porter que sur la fenêtre dite de continuation :
] I.t - Φ.rel_cert, I'.t - Φ.rel_cert]
II s'agit donc de prolonger les résultats acquis sur [sup(T_origine, T_origine - Φ.rel_cert), I.t-Φ.rel_cert] par un calcul sur ] l.t - Φ.rel_cert, l'.t - Φ.rel_cert] de sorte que in fine le résultat est obtenu sur [sup(T_origine, T_origine - Φ.rel_cert), l'.t - Φ.rel_cert] qui est bien l'intervalle de certitude de Φ lorsque I' est le dernier instantané. C'est ce qui est désigné dans ce contexte, par principe de continuation. Sur le plan algorithmique, à chaque formule Φ sont associées deux variables :
• la variable Φ.abs_cert qui est initialisée à o Option 1 : (T_origine - Φ.rel_cert) o Option 2 : sup(T_origine, T_origine - Φ.rel_cert)
• une variable de type intervalle, initialisée à vide. Appelons cette variable Φ.w pour une formule Φ (w pour « window » soit fenêtre en français). C'est cette seconde variable qui représente la fenêtre de continuation de Φ. La fenêtre de continuation Φ.w de Φ se calcul ainsi (on suppose l'initialisation Φ.abs_cert effectuée comme décrit ci-dessus):
• A chaque rafraîchissement de l'instantané I faire :
• Si Φ.w est vide : o Si (l.t - Φ.rel_cert) > Φ.abs_cert alors Φ.w devient : [Φ.abs_cert, l.t - Φ.rel_cert] puis affecter à Φ.abs_cert la valeur (l.t - Φ.rel_cert) o Si (l.t - Φ.rel_cert) < Φ.abs_cert alors Φ.w reste l'intervalle vide
• Si Φ.w n'est pas vide alors : o Φ.w devient :] Φ.abs_cert, l.t - Φ.rel_cert] o Affecter à Φ.abs_cert la valeur (l.t - Φ.rel_cert)
Afin de rendre optimal le calcul de la liste de validité d'une formule Φ sur sa fenêtre de continuation, il s'agit de déterminer, dans les sous-formules de Φ, quels intervalles sont susceptibles de générer de nouveaux intervalles dans cette fenêtre de continuation de Φ. C'est l'objet de la notion de zone d'influence que de cibler seulement ces intervalles.
Les étapes de calcul données pour la formule principale Φ restent les mêmes lorsque l'on considère les sous-formules ψ d'une formule et sa variable associée ψ.abs_cert. Notion de zone d'influence
Cette notion intervient dans l'objet de l'invention, à deux titres :
• Elle définit, pour une formule Φ, quels intervalles des sous-formules de Φ ont une influence sur la fenêtre de continuation Φ.w de Φ définie précédemment,
• Réciproquement, elle définit, pour une formule Φ, quels intervalles des sous-formules de Φ 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.
Là encore l'opérateur F[a,b] est particulièrement intuitif pour présenter ce principe avant sa généralisation à tout opérateur. La figure 8A illustre la zone d'influence pour F[a,b]Φ- Dans cette figure 8A, le dernier instantané est I' tandis que le précédent est I. La fenêtre de continuation (F[a,b] Φ).w de F[a,b] Φ est donc ] l.t - (F[a!b] Φ).rel_cert, l'.t - (F[a,b] Φ).rel_cert ].
Les premières dates sur la valeur de Φ qui influent sur la fenêtre de continuation de F[aib]Φ sont les dates supérieures à l.t - (F[a!b] Φ).rel_cert + a tandis que la dernière qui influe sur cette fenêtre de continuation est l'.t - (F[aib] Φ).rel_cert + b. Autrement dit il s'agit de l'intervalle F[aib].w Θ [a,b]. Ceci peut s'exprimer et se généraliser sous la forme d'une fonction qui admet en arguments deux formules et qui renvoie un intervalle. Si Ψ est une formule sous-formule directe de Φ, ZI(Ψ,Φ) est la plage temporelle de la liste de validité de Ψ à considérer dans le calcul de la continuation de Φ. Par plage temporelle nous entendons tout simplement un intervalle. Finalement nous dirons qu'un intervalle de la liste de validité de Ψ a une influence sur la fenêtre de continuation de Φ si et seulement si il a une intersection non vide avec ZI(Ψ,Φ). Conformément à notre analyse pour le F[a b]Φ, nous aurions donc : ZI(Φ, F[a,t>] Φ) = (F[a,t>] Φ)-w Θ [a,b]. Définition de la fonction Zl :
Figure imgf000048_0001
• ZI(Φi , (Φi Λ Φ2 )) = ZI(Φ2 , (Φi Λ Φ2 )) = (Φi Λ Φ2 ).W
• ZI(Φi , (Φi v Φ2 )) = Zl (Φ2 , (Φi v Φ2 )) = (Φi v Φ2 ).w
• Zl (Φ, F[a,b] Φ) = (Fta,b] Φ).w Θ [a,b] • Zl (Φ, P[a,b] Φ) = (P[a,b] Φ).w Θ [-b,-a]
• Zl (Φ, P[a,>]Φ) = (P[a,>] Φ).w Θ [-a, -a]
• ZI(Φ1 ;1 U[a,b] Φ2)) = (Φ1 U[a,b] Φ2).w Θ [a,b]
• ZI(Φ2j (Φi U[a,b] Φ2)) = (Φ1 U[a,b] Φ2).w Θ [a,b]
• ZI(Φ1 ;1 S[a,b] Φ2 )) = (Φ1 S[a,b] Φ2 ) Θ [-b,-a] • ZI(Φ2, (Φi S[a,b] Φ2 )) = (Φ1 S[a,b] Φ2 ) Θ [-b,-a]
• ZI(Φ1 s (Φi S[a,>] Φ2 )) = ((Φi S[a,>i Φ2 ).w Θ [-a, -a])
• ZI(Φ2, (Φ, S[a,>] Φ2 )) = ((Φi S[a,>] Φ2 ).w Θ [-a, -a])
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 Zl. 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 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 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 8A (la zone d'influence pour Φ est bien dans sa zone de certitude). Or cela est toujours le cas. Ceci se démontre à partir des définitions des fonctions Cert et Zl.
Le calcul par continuation peut là encore être facilement illustré pour F[a,t>] Φ- II s'agit de ne considérer que les intervalles de la liste de validité de Φ situés dans la zone d'influence calculée pour F[a,b]Φ- Etant donné que ces intervalles ont plus de chance d'être à la fin de la liste de validité de Φ l'algorithme procède par marche arrière. Il remonte la liste de validité de Φ à 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 Φ 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 F[a,b] Φ- Pour chaque production nous calculons son intersection avec la fenêtre de continuation de F[a,b] Φ- Si elle 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 F[a,b]Φ-LV (Voir l'Annexe 1 pour un calcul détaillé de F[a,t>] Φ). Le principe de continuation présente néanmoins des particularités pour les opérateurs P[a,>] et S[a,>j. Pour une formule de type P[aj>] Φ il suffit que Φ soit vraie une seule fois à une date t pour que P[ai>] Φ soit vraie au-delà de t+a. Le procédé peut donc être simplifié. Dès que Φ est vraie, c'est-à-dire Φ.LV possède un premier i, on créé l'intervalle (i.l, i.lb + a, ((P[a,>] Φ).w).ub, ((P[a,>j Φ).w).u) que l'on ajoute à la liste de validité vide de P[a,>] Φ ; ensuite cet intervalle est systématiquement étendue sur sa borne supérieure (qui devient donc l.t - (P[a,>j Φ).rel_cert à chaque rafraichissement), sans se préoccuper de la valeur de Φ. Pour S[a,>], d'après la sémantique de cet opérateur, le procédé doit examiner la valeur de vérité de Φ2 arbitrairement loin dans le passé et donc aussi celle de Φ-i . Mais cette approche obligerait à conserver en mémoire tous les intervalles de Φ2 et de Φ-i. De sorte que la mémoire requise par le moniteur pourrait croitre indéfiniment. Or un des objectifs de la présente invention est que la mémoire requise par le moniteur soit bornée. En réalité l'information que Φ2 a été vraie est conservée dans la liste de validité de Φi S[a,>] Φ2. En effet, considérant le calcul de Φi S[a,>] Φ2 sur sa fenêtre de continuation, si le dernier intervalle de la liste de validité de Φ1 S[a,>] Φ2 est tel que sa borne supérieure est (Φ1 S[a,>] Φ2).w.ub alors cela signifie qu'il a existé dans la ou les fenêtre(s) précédente(s) de continuation, un intervalle i de Φ1 ayant intersecté un intervalle de Φ2 dans le passé et qui se prolongeait au moins jusqu'à (Φ1 S[a,>] Φ2).w.ub. Si lors du calcul de Φ1 S[a,>] Φ2 le procédé trouve dans la liste de validité de Φ1 un intervalle qui contient (Φ1 S[a,>] Φ2).w.ub, cela signifie qu'il prolonge i sans interruption, et que donc il prolonge la validité de Φ1 S[a,>] Φ2- La mémoire que Φ2 a été vraie est donc contenue dans le dernier intervalle de la liste de validité de Φi S[a,>] Φ2. C'est pourquoi nous serons en mesure d'éliminer les intervalles de Φ1 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 Cert 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 rafraîchi • Grâce à la fontion Zl, nous sommes en mesure, quand nous faisons effectuons le calcul de la continuation, de limiter les intervalles à prendre en compte pour ce calcul.
Zone d'influence et élimination des intervalles inutiles illustrés à la figure 8A, 8B
II 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é). Si Φ est la formule principale, que l.t est la date portée par le dernier instantané I, nous savons que sur [sup(T_origine, T_origine - Φ.rel_cert), l.t - Φ.rel_cert] le calcul de la liste de validité de Φ est certain c'est-à-dire ne peut plus être modifié quoiqu'il advienne. Ainsi les intervalles des sous-formules qui ne peuvent impacter, au niveau de la formule principale, que la zone [sup(T_origine, T_origine - Φ.rel_cert), l.t - Φ.rel_cert] ne peuvent plus apporter d'information nouvelle déterminante. Ainsi ils sont inutiles. Il s'agit donc de les éliminer de la mémoire. Pour cela il faut être capable de déterminer, pour chaque sous- formule, en deçà de quelle date les intervalles peuvent être éliminés. Pour la formule principale Φ, cette date d'inutilité absolue, que nous appelerons Φ.abs_di, est donc : l.t - Φ.rel_cert. En effet, si des intervalles dans [sup(T_origine, T_origine - Φ.rel_cert), l.t - Φ.rel_cert] ont été obtenus par le procédé, l'hypothèse suivante peut être émise : ces intervalles ont été exploités (pour émettre un signal d'alarme ou un signal de régulation du système...). Ayant été exploités, ils ne sont plus utiles. Le cas de la conjonction est particulièrement intuitif (figure 8B). Dans cette figure considérons les intervalles h de Φi et \z de Φ2. D'après leurs positions ils ne peuvent contribuer à former des intervalles de validité pour (Φi Λ Φ2) que dans la zone déjà certaine de (Φi Λ Φ2). Désormais ils sont donc inutiles pour décider de la validité de (Φi Λ Φ2). Il en serait de même de tout autre intervalle antérieur à l.t - Cert(Φi Λ Φ2). Autrement dit, si z est la date d'inutilité absolue de (Φi Λ Φ2) alors la date d'inutilité absolue de Φi et de Φ2 est aussi z. Cependant, si (Φi Λ Φ2) n'est pas la formule principale, il se peut que Φi et Φ2 soient aussi sous-formules d'autres formules. Il se peut donc que d'autres formules leurs imposent une date d'inutilité antérieure à z. Ainsi, ce qui peut être affirmé à partir de (Φi A Φ2) et de sa date d'inutilité z est que les dates d'inutilité de Φi et de Φ2 doivent être inférieures ou égales à z. Une généralisation de ceci à toutes les formules du langage est explicitée ci- après.
Pour généraliser, le procédé va prendre en compte les contraintes que doit satisfaire une fonction, que nous nommerons Dl, pour être une fonction d'inutilité avec dans l'idée qu'une fonction d'inutilité prend en argument une formule Φn supposée être une sous-formule d'une formule principale Φ, et renvoi un nombre réel DI(Φn), de telle sorte que la date absolue d'inutilité Φn.abs_di de Φn soit : Φ.abs_di + DI(Φn).
DI(Φn) est donc une date d'inutilité relative à la date d'inutilité absolue Φ.abs_di de la formule principale. Pour la définition inductive nous devons aussi attribuer une valeur à DI(Φ). Puisque nous voulons que Φn.abs_di = Φ.abs_di + DI(Φn) pour n'importe quelle sous-formule Φn de Φ , si Φn est la principale Φ elle-même nous devons avoir Φ.abs_di = Φ.abs_di + Dl (Φ), soit donc DI(Φ) = 0. Etant donnée une formule Φ et l'ensemble {Φi, ..., Φn} de ses sous-formules une fonction Dl de {Φ-i, ..., Φn, Φ} → R est une fonction d'inutilité si elle est telle que toutes ces contraintes sont vérifiées :
• DI(Φ) = 0 (0 pour la formule principale) Et pour ij e [1 ,n]
• DΙ(Φi) < Dl(→ï>ι) • DI(Φι) < DI(ΦJ Λ ΦJ) • DKΦjJ≤DIfΦiΛΦj)
• DI(Φ,)≤DI(F[a,b]Φ,) + a
• DI(Φ,)<DI(P[a,b]Φ,)-b
• DI(Φι)≤DI(P[a,>]Φι)-a • DI(Φι) < DI(Φι U[a,b] Φj) + a
• DI(Φj) < DI(Φ,U[a,b] Φj) + a
• DI(Φι)< DI(Φι S[a,b] Φj) - b
• DI(Φj)< Dl (Φ, Sta,b] Φj) ~ b
• DI(Φ,)< DI(Φ|S[ai>]Φj)-a • DI(Φj) ≤ DI(Φ|S[ai>]Φj)-a
En pratique, la fonction retenue sera celle qui attribue la valeur la plus grande possible pour chaque sous-formule, de sorte à pouvoir éliminer le plus grand nombre d'intervalles possibles. Il s'agit en fait de choisir la plus grande valeur donnée par la contrainte la plus forte. Par exemple, si, pour une formule Φj, la plus forte contrainte est DΙ(Φi) < DI(P[a,b] Φι) - b, alors le choix pour la fonction est DΙ(Φi) = DI(P[a,b] Φι) - b.
Ci-dessous nous présentons un mode de calcul possible de la date d'inutilité de chaque sous-formule de la formule principale.
1. Pour chaque sous-formule Ψ de la principale Φ (y compris Φ elle- même) créer une variable de type réel Ψ.rel_di et lui assigner la valeur symbolique ∞ (∞ est tel que x < ∞ est toujours vraie pour x un réel standard)
2. Assigner 0 à Φ.rel_di (seule la principale est mise à 0)
3. Appel de calcul_di(Φ, 0) où calcul_di est l'algorithme récursif présenté ci-dessous. calcul_di(Φ,r) :
D1 - Si r < Φ.rel_di alors Φ.rel_di = r D2 - Si Φ est :
D2.1 - une proposition p alors FIN. D2.2 - -iΦi alors appeler calcul_di(Φ-ι, Φ.rel_di) D2.3 - Φ! Λ Φ2 alors appeler calcul_di(Φi, Φ.rel_di) puis calcul_di(Φ2, Φ.rel_di)
D2.4 - Φ1 v Φ2 alors appeler calcul_di(Φi, Φ.rel_di) puis calcul_di(Φ2, Φ.rel_di) D2.5 - F[a,b] Φi alors appeler calcul_di(Φi, Φ.rel_di + a)
D2.6 - P[a,b] Φi alors appeler calcul_di(Φi, Φ.rel_di - b) D2.7 - P[a,>] Φi alors appeler calcul_di(Φi, Φ.rel_di - a) D2.8 - Φi U[a,b] Φ2 alors appeler calcul_di(Φi, Φ.rel_di + a) puis calcul_di(Φ2, Φ.rel_di + a) D2.9 - Φ1 S[a,b] Φ2 alors appeler calcul_di(Φi, Φ.rel_di - b) puis calcul_di(Φ2, Φ.rel_di - b)
D2.10 - Φ1 S[a,>] Φ2 alors appeler calcul_di(Φ-ι, Φ.rel_di - a) puis calcul_di(Φ2, Φ.rel_di - a)
Etant donné ce mode de calcul, pour toute sous-formule Ψ de la formule principale Φ, il est possible de calculer sa date absolue d'inutilité propre, notée Ψ.abs_di :
Ψ.abs_di = Φ.abs_di + Ψ.rel_di Où Φ. abs_di = (Φ.w).ub L'élimination des intervalles inutiles consiste à supprimer, pour chaque sous- formule Ψ de la formule principale Φ, les intervalles de sa liste de validité strictement antérieurs à sa date absolue d'inutilité propre Φ.abs_di + Ψ.rel_di (un intervalle est strictement antérieur à une date si tous ses points sont inférieurs, au sens des nombres réels, à cette date). Le mécanisme d'élimination des intervalles devenus inutiles 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é. Exemple d'application du procédé pour la surveillance d'un système masse- ressort La figure 9 illustre un exemple d'application pratique au contrôle du comportement d'un système masse-ressort. Une masse M se déplaçant sans frottement sur un plan horizontal est reliée à un support vertical S par un ressort R et un système d'amortissement A. Plusieurs propriétés peuvent être analysées par le procédé selon l'invention, lors d'une simulation de ce modèle.
Par exemple, une propriété attendue pourrait être que la force f et le déplacement x varient toujours dans le même sens. Autrement dit, ce qui est redouté est la proposition (df.dx < 0). II est possible de relâcher cette propriété en demandant que s'il arrive que (df.dx < 0) alors (df.dx > 0) est rétablie entre 0.2 et 0.5 secondes plus tard. Autrement dit la propriété attendue est (df.dx < 0) → F[02, 05] (df.dx > 0). La formule exprimant le comportement redouté est donc -1 ( -1 ((df.dx < 0) Λ -1 Fp 2, 05] (df.dx > 0))) c'est-à-dire plus simplement : (df.dx < 0) Λ -1 F[0 2, 05] (-> (df.dx < O)).
Une autre propriété attendue pourrait être : on doit avoir (df.dx > 0) globalement mais on tolère que (df.dx < 0) quand df est proche de zéro (à plus ou moins 0.5 newtons). La propriété attendue est donc (df.dx > 0) v (- 0.5 < df < 0.5) . La propriété redoutée est sa négation -1 ((df.dx > 0) v (-0.5 < df < 0.5) ) soit plus simplement ((df.dx < 0) Λ (-0.5 < f v f > 0.5)).
Pour résumer, les propriétés envisagées pour générer des moniteurs pour ce modèle pourraient être :
• df.dx < 0
• (df.dx < 0) Λ -1 F[o 2, 0 si H (df.dx < O)) • (df.dx < 0) Λ (-0.5 < f v f > 0.5)
Pour illustrer de façon plus complète le procédé, nous allons étudier son déroulement en considérant la propriété (df.dx < 0) Λ -1 (F102, 05] (-> (df.dx < 0))). La date T_origine choisie est 0. La stratégie d'utilisation est la suivante : nous stoppons le moniteur dès l'occurrence du comportement redouté, c'est- à-dire lorsque la liste de validité de notre formule est non vide. Les sous- formules (classées par hauteurs croissantes) sont :
• (df.dx < 0) qui est une proposition
• -. (df.dx < 0) • F[o 2, o s] (-i (df.dx < O))
• --(F[O 2, o s] (i (df.dx < 0)))
Le calcul de la certitude est le suivant :
• (df.dx < O).rel_cert = 0 • (-i (df.dx < O)). rel_cert = (df.dx < O).rel_cert = 0
• (F[o 2, o 5] (-i (df.dx < 0))).rel_cert = o (-i (df.dx < O)).rel_cert + 0.5 = o 0 + 0.5 = 0.5
• H(F1O 2, o s] (-i (df.dx < O)))).rel_cert = o (F[o 2, o 5] H (df.dx < O))).rel_crt = o 0.5
• Cert((df.dx < 0) Λ -. (F[0 2, o 5] (-< (df.dx < 0))) = o sup(Cert(df.dx < O),Cert(-i F[o 2, o 5] (-> (df.dx < 0)))) = o sup(0, 0.5) = 0.5
Le tableau ci-dessous résume les valeurs attribuées à chaque formule par la fonction Cert.
Figure imgf000057_0001
e tableau ci-dessous illustre le calcul de Φj.rel_di . Dans ce tableau X(i) signifie que la valeur X a été calculée en raison du fait que la formule considérée est sous-formule de la formule de la ligne i. Par exemple la notation 0.2(3) en ligne 2, signifie que 0.2 a été calculée pour -i (df.dx < 0) en raison du fait que cette formule est sous-formule de celle située en ligne 3. On peut voir que (df.dx < 0) est sous-formule de deux formules (celles en ligne 2 et 5, c'est pourquoi il existe deux valeurs pour cette formule).
Figure imgf000057_0002
A partir de maintenant les étapes du procédé selon l'invention vont être déroulées en indiquant l'instantané et son effet sur le moniteur, lequel est représenté sous la forme d'un tableau. Ce tableau possède notamment une colonne « Liste de validité » qui permet de visualiser les listes de validité pour chaque sous-formule.
1er rafraichissement: l.(df.dx < 0) = 1 , l.t = 0.
Pour les formules purement booléennes le calcul se base sur l'algorithme direct. C'est pourquoi la fenêtre de continuation n'est pas mentionnée. Moyennant ce premier instantané, le tableau ci-dessous résume l'état des différents aspects de notre procédé : fenêtre de continuation pour chaque formule, date absolue d'inutilité, listes de validité.
Figure imgf000058_0001
La fenêtre de continuation reste vide pour certaines formules. Par exemple pour Φ3 = F[o 2, o s] (-> (df.dx < 0). En effet nous avons l.t - Φ3.rel_cert < Φ3.abs_cert puisque l.t - Φ3.rel_cert = 0 - 0.5 = -0.5 et Φ3.abs_cert = 0.
\ième rafraichissement: I. (df.dx < 0) = 0, I t = 0.3
φ, Expressions Φi.W Φi.LV
Φi (df.dx < 0) ([0,0.3[)
Φ7 (df.dx < 0) ([0.3,0.3])
Φ, F[o 2, o s] (-i (df.dx < O))
Φ_! iF[02, o 5] (-i (df.dx < O)) φc (df.dx < 0)
Figure imgf000058_0002
2, o s] (-i (df.dx < O)) Là encore la fenêtre de continuation reste vide pour certaines formules. Par exemple pour Φ3 = F[02, os] (-> (df.dx < 0). En effet nous avons l.t - Φ3.rel_cert < Φ3.abs_cert puisque l.t - Φ3.rel_cert = 0.3 - 0.5 = -0.2 et Φ3.abs_cert = 0.
3ième rafraîchissement: I. (df.dx < 0) = 1 , l.t = 0.7
Dans ce tableau nous ajoutons une colonne pour les nouveaux intervalles à adjoindre à la liste existante. Rappelons qu'ils ne sont adjoints à la liste de validité qu'après troncature par la fenêtre de continuation.
Figure imgf000059_0001
Détail du calcul de Φ3.w. Nous avons l.t - Φ3.rel_cert = 0.7 - 0.5 = 0.2. Or 0.2 > Φ3.abs_cert car Φ3.abs_cert = 0. Comme Φ3.w était vide jusque là maintenant cette fenêtre devient [Φ3.abs_cert, l.t - Φ3.rel_cert] soit [0,0.2].
lième
4ieme rafraichissement: l.(df.dx < 0) = 0, I t = 1
Figure imgf000060_0001
5 -iièemmee rafraîchissement: l.(df.dx < 0) = 1 , I t = 1.2
Figure imgf000060_0002
Observons que pour Φ-, et Φ2, des intervalles de leurs listes de validité respectives sont antérieurs strictement à leurs dates d'inutilité absolues respectives. Ce sont [0,0.3[ pour Φi et [0.3,0.7[ pour Φ2. Ces intervalles peuvent être supprimés des listes de validité respectives (ils ne jouent plus aucun rôle dans la détection de Φ5 qui est la principale). Comme il a été expliqué, c'est ce mode de suppression qui permet d'assurer que le moniteur nécessite une ressource mémoire bornée.
6ième rafraichissement: l.(df.dx < 0) = 1 , l.t = 1.8
Figure imgf000061_0001
A ce stade, un intervalle est apparu dans la liste de validité de la formule principale Φ5 du procédé selon l'invention. Cet intervalle [1.2, 1.3] indique que le comportement redouté se produit sur cet intervalle. En effet (df.dx < 0) est maintenu sur [1.2, 1.8]. Ainsi pour les dates de [1.2, 1.3] le retour à la normale (c'est-à-dire (df.dx > O)) n'a pas lieu. C'est bien ce que révèle le moniteur.
Le procédé et le système selon l'invention présentent notamment les avantages suivants : Un procédé automatique : le moniteur est calculé automatiquement à partir de l'expression du comportement redouté et le fonctionnement du moniteur est automatique en fonctionnement normal. Il est de fait rapide et peu coûteux en mémoire.
Le procédé peut s'appliquer à tout modèle, contrairement aux approches types preuve ou model-checking qui analysent le modèle tel qu'il est défini dans sa structure interne. Le moniteur ne s'intéresse qu'aux exécutions d'un système, à ses productions observables. Que le modèle soit, dans sa structure interne, très simple ou très complexe, de petite ou de grande taille, cela est sans incidence pour le moniteur généré, puisqu'il ne dépend pas de la structure du modèle mais uniquement de la formule donnée en entrée. L'analyse est effectuée en ligne, ce qui signifie que :
• La surveillance du processus est réalisée pendant que le processus d'exécution/simulation se produit,
• La surveillance est opérée sans limite de durée,
• La surveillance se fait sans stockage de l'exécution, • La mémoire consommée par le moniteur est bornée (ce qui permet une surveillance sans limite de durée)
Le procédé selon l'invention ne suppose pas de régularité particulière sur l'exécution, le délai entre deux observations pouvant être quelconque.
Annexe 1
Notations :
Dans les algorithmes ci-dessous « Buffer » est une variable de type liste de validité, initialisée à vide au départ de chaque algorithme. « Nil » n'a pas de sens spécifique. Il intervient pour dénoter des objets vides ou non définis (listes, intervalles ...)
Φ.LV : pour liste de validité de Φ (listes d'intervalles disjoints rangée de façon croissante)
Φ.LV.first et Φ.LV.Iast dénotent respectivement le premier et le dernier élément de Φ.LV (sont tous deux Nil pour dénoter que Φ.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, Ib, 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 Ib et ub
Ib : 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.l, i.lb, i.ub et i.u 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)
Calcul de Φ = ^Ψ : o on déclare : iter = Ψ.LV.Iast o « Tant que » iter n'est pas Nil faire : o Si iter est strictement inférieur à Φ.w faire : o créer un l'intervalle virtuel iv = ] Φ.w.ub, Φ.w.ub + 1] o faire que le prédécesseur de iv soit celui de iter: iv.pred = iter.pred o iter devient cet intervalle virtuel: iter = iv o passer à l'étape 4 o Si iter chevauche Φ.w à droite, c'est-à-dire si iter n Φ.w ≠ 0 et (iter n Φ.w).ub = w.ub, alors passer à l'étape 4 o iter = iter.pred o retour « tant que » 2 o Si iter est Nil (Ψ.LV est vide ou bien tous les intervalles de Ψ.LV sont strictement supérieurs à Φ.w): o créer un l'intervalle virtuel iv = ] Φ.w.ub, Φ.w.ub + 1 ] o faire pointer le prédécesseur de iv sur celui de iter: iv.pred = iter.pred o iter devient cet intervalle virtuel: iter = iv o « Tant que » iter n'est pas Nil faire : o si iter n ZI(Ψ,Φ) est vide : o si iter est vide ou non vide mais inférieur à ZI(Ψ,Φ) alors passer à l'étape 5 o sinon iter = iter.pred et retour du « tant que » 4 o créer l'intervalle nv : o Si iter.pred n'est pas Nil alors nv est (1 - iter.pred. u, iter.pred. ub, iter.lb, 1 - iter.l ) o sinon nv est (Φ.w.l, Φ.w.lb, iter.lb, 1 - iter.l ) o si nv n Φ.w n'est pas Nil l'adjoindre à gauche dans Buffer o iter = iter.pred o retour du « tant que » 4 o Raccorder Buffer à droite de Φ. LV o FIN
Calcul de Φ = Ψi Λ Ψ2 : 1 . on déclare : iteri = Ψ!.LV.Iast et iter2 = Ψ2.LV.Iast 2. « Tant que » iteri et iter2 sont différents de Nil faire
2.1. Si iteri n ZI(Ψi,Φ) différent de Nil a) « Tant que » iteri n iter2 n'est pas Nil
• adjoindre (iteri n iter2 n Φ.w) à gauche dans Buffer • iter2 = iter2.pred
• retour du « tant que » 2.1.a)
2.2. Si iteM n ZI(Ψi, Φ) est Nil et que iteM < ZI(Ψi, Φ) alors aller à l'étape 3
2.3. iteM = iteri .pred 2.4. retour du « tant que » 2
3. Raccorder Buffer à droite de Φ.LV
4. FIN
Calcul de Φ = Ψ1 v Ψ2 : On introduit une notation supplémentaire. Soient i et j deux intervalles. On note j Z i si une des conditions suivantes est satisfaite :
• j est Nil et i n'est pas Nil
i = j
• i.ub > j.ub • i.ub = j.ub et i.u = 1 et j.u = 0
• i.ub = j.ub et i.u = j.u et une de ces conditions est satisfaite : o i.lfcx j.lb o i.lb ≈ j.lb et i.l = 1 et j.l = 0
Autrement dit on a j Z i lorsque i va plus loin dans le futur ou bien, s'il va aussi loin que j, il va alors plus loin dans le passé que j.
1 . on déclare : itert = Ψ1.LV.Iast et iter2 = Ψ2.LV.Iast et tmp = Nil
2. « Tant que » iteri ou iter2 est différent de Nil faire : 2.1 . si iter2 Z iteri alors passer à l'étape 2.3 2.2. sinon (on échange iteri et iter2): a) tmp = iteri b) iteri = iter2 c) iter2 = tmp 2.3. Si iteri < ZI(Ψ1; Φ) alors FIN
2.4. Adjoindre à gauche iteri n Φ.w dans Buffer
2.5. « tant que » iter2 n'est pas Nil faire : a) si iter2 chevauche iteri à gauche, c'est-à-dire si iter2 n iteri
≠ 0 et (iter2 n iteri ).lb = iteri .Ib, alors passer en 2.6 b) si iter2 < iteri alors passer en 2.6 c) iter2 = iter2.pred d) retour « tant que » 2.5.
2.6. iteri = iteri .pred
2.7. retour du « tant que » 2. 3. Raccorder Buffer à droite de Φ. LV
4. FIN
Calcul de Φ = F[a,b] Ψ : 1. iter ≈ Ψ.LV.Iast 2. « tant que » iter n'est pas Nil faire :
2.1. Si iter n ZI(Ψ, Φ) est Nil a) Si iter < ZI(Ψ, Φ) alors passer à l'étape 3 b) Sinon iter = iter.pred et retour du « tant que » 2
2.2. Adjoindre à gauche ((iter Θ [-b,-a]) n Φ.w) dans Buffer 2.3. iter = iter.pred
2.4. retour du « tant que » 2
3. Raccorder Buffer à droite de Φ.LV
4. FIN Calcul de Φ = P[a,b] Ψ :
1. iter = Ψ.LV.Iast
2. « tant que » iter n'est pas Nil faire : 2.1. Si iter n ZI(Ψ, Φ) est Nil a) Si iter < ZI(Ψ, Φ) alors FIN b) Sinon iter = iter.pred et retour du « tant que » 2
2.2. Adjoindre à gauche ((iter Θ [a,b]) n Φ.w) dans Buffer
2.3. iter = iter.pred
2.4. retour du « tant que » 2 3. Raccorder Buffer à droite de Φ. LV
4. FIN
Calcul de Φ = P[a,>] Ψ :
1. Si Φ.LV n'est pas vide, alors soit i son unique intervalle. On modifie cet intervalle de sorte qu'il devienne (i.l, i.lb, w.ub, w.u) et FIN.
2. Si Ψ.LV est vide alors ne rien faire et FIN.
3. Si Ψ.LV n'est pas vide et que i est son premier élément alors ajouter (i.l, i.lb + a, w.ub, w.u) à P[a,>] Φ.LV et FIN.
Calcul de Φ = Ψ! U[0,b] Ψ2 :
1. iteri = Ψi.LV.Iast et iter2 = Ψ2.LV.Iast et tmp = Nil
2. « tant que >> iter2 n'est pas Nil 2.1. Si iter2 n ZI(Ψ2, Φ) est Nil a) Si iter2 < ZI(Ψ2, Φ) alors FIN. b) Sinon iter2 = iter2.pred
2.2. retour du « tant que » 2
3. « tant que » iter2 n'est pas Nil
3.1 . Si iter2 < ZI(Ψ2, Φ) alors FIN.
3.2. Adjoindre iter2 à gauche dans Buffer (puisque a=0 il y a tout iter2) 3.3. « tant que » iteri n'est pas Nil a) Si iteri ] n iter2 n'est pas Nil alors tmp = iteri b) Si iteri ] < iter2 alors passer à l'étape 3.4 c) iteri = iteri .pred d) retour « tant que » 3.3
3.4. iteri = tmp (iteri est le plus antérieur qui étende iter2 vers le passé)
3.5. Si iteri ] chevauche iter2 à gauche, c'est-à-dire si itert ] n iter2 ≠ 0 et (iteri ] n iter2).lb = iter2.lb, alors : a) Adjoindre à gauche ((iteri .I, iteri .Ib, iter2,lb, iter2.l) n (iter2.l, iter2.lb - b, iter2,lb, iter2.l) n Φ.w) dans Buffer
3.6. iter2 = iter2.pred
3.7. retour du « tant que » 3
4. Raccorder Buffer à droite de Φ.LV 5. FIN
Calcul de Φ = Ψ1 U[a,b] Ψ2 avec a > 0 :
1 . iteri = Ψi.LV.Iast et iter2 = Ψ2.LV.Iast
2. « tant que » iter2 n'est pas Nil faire : 2.1 . Si iter2 n ZI(Ψ2, Φ) est Nil a) Si iter2 < ZI(Ψ2, Φ) alors FIN. b) Sinon iter2 = iter2.pred 2.2. retour « tant que » 2
3. « tant que >> iter2 n'est pas Nil faire : 3.1 . Si iter2 < ZI(Ψ2, Φ) alors FIN.
3.2. « tant que » iteri n'est pas Nil faire : a) Si iteri ] n iter2 (rappel : i] est le fermé à droite de i) n'est pas Nil alors adjoindre à gauche (( (iteri ] n iter2) Θ [-b,-a]) n iteri ]) n Φ.w dans Buffer b) Sinon passer à l'étape 3.3 c) iteri = iteri .pred d) retour du « tant que » 3.2
3.3. iter2 = iter2.pred
3.4. retour du « tant que » 3 4. Raccorder Buffer à droite de Φ.LV
5. FIN
Calcul de Φ = Ψi S[0,b] Ψ2 :
1. iteri = Ψi.LV.Iast et iter2 = Ψ2.LV.Iast 2. « tant que » iter2 n'est pas Nil
2.1 . Si iter2 n ZI(Ψ2, Φ) est Nil a) Si iter2 < ZI(Ψ2, Φ) alors FIN. b) Sinon iter2 = iter2.pred
2.2. retour du « tant que » 2 3. « tant que » iter2 n'est pas Nil
3.1 . Si iter2 < Zl (Ψ2, Φ) alors FIN.
3.2. « tant que » iteri n'est pas Nil a) Si [iteri n iter2 n'est pas Nil alors passer à l'étape 3.3 b) Si iteri < iter2 alors FIN. c) iteri = iteM .pred d) retour « tant que » 3.2
3.3. Si [iteri chevauche iter2 à droite : a) alors adjoindre à gauche ((iter2.l, iter2.lb, iteri .ub, iteri .u) n (iter2.l, iter2.lb, iter2,ub + b, iter2.l) n Φ.w) dans Buffer b) sinon adjoindre à gauche iter2 dans Buffer
3.4. iter2 = iter2.pred
3.5. retour du « tant que » 3
4. Raccorder Buffer à droite de Φ.LV
5. FIN Calcul de Φ = Ψi S[a,b] Ψ2 avec a > 0 :
1. iteri = Ψi.LV.Iast et iter2 = Ψ2.LV.Iast
2. « tant que » iter2 n'est pas Nil faire : 2.1. Si iter2 n ZI(Ψ2) Φ) est Nil a) Si iter2 < ZI(Ψ2, Φ) alors FIN. b) Sinon iter2 = iter2.pred
2.2. retour « tant que » 2
3. « tant que » iter2 n'est pas Nil faire :
3.1. Si iter2 < ZI(Ψ2, Φ) alors FIN. 3.2. « tant que » iteri n'est pas Nil faire : a) Si [iteri n iter2 (rappel : [i est le fermé à gauche de i) n'est pas Nil
• alors adjoindre à gauche (( ( [iteri n iter2) Θ [a, b]) n [iteri )) n Φ.w dans Buffer • sinon passer à l'étape 3.3 b) iteri = iteM .pred c) retour du « tant que » 3.2
3.3. iter2 = iter2.pred
3.4. retour du « tant que » 3 4. Raccorder Buffer à droite de Φ.LV
5. FIN
Calcul de Φ = Ψ1 S[a,>] Ψ2 avec a > 0 :
1. iteri = Ψi.LV.Iast et iter2 = Ψ2.LV.Iast 2. « tant que » iter2 n'est pas Nil faire :
2.1. Si iter2 n ZI(Ψ2, Φ) est Nil a) Si iter2 < ZI(Ψ2, Φ) alors FIN. b) Sinon iter2 = iter2.pred
2.2. retour « tant que » 2 3. « tant que » iter2 n'est pas Nil faire : 3.1. Si iter2 < ZI(Ψ2, Φ) alors FIN.
3.2. « tant que » iteri n'est pas Nil faire : a) Φ.lb e iteri alors adjoindre iteri à gauche dans Buffer et passer a l'étape 4 b) Si iter2 n [iteri (rappel : [i est le fermé à gauche de i) n'est pas Nil alors adjoindre (1 , iteri .Ib + a, iteri .ub, iteri .u) n Φ.w à gauche dans Buffer c) Sinon passer à l'étape 3.3 d) iteri = iteri .pred e) retour du « tant que » 3.2
3.3. iter2 = iter2.pred
3.4. retour du « tant que » 3
4. Raccorder Buffer à droite de Φ.LV
5. FIN
Calcul de Φ = W1 S[o,>] Ψ2 :
1. iteri = Ψj.LV.Iast et iter2 = Ψ2.LV.Iast
2. « tant que » iter2 n'est pas Nil
2.1. Si iter2 n ZI(Ψ2, Φ) est Nil a) Si iter2 < ZI(Ψ2, Φ) alors FIN. b) Sinon iter2 = iter2.pred
2.2. retour du « tant que » 2
3. « tant que >> iter2 n'est pas Nil
3.1. Si iter2 < ZI(Ψ2, Φ) alors FIN. 3.2. « tant que » iteri n'est pas Nil a) Si iter2 n [iteri n'est pas Nil alors passer à l'étape 3.3 b) Si iteri < iter2 alors FIN. c) iteri = iteri .pred d) retour « tant que » 3.2 3.3. Si [iteri chevauche iter2 à droite : a) alors adjoindre à gauche (iter2.l, iter2.lb, iteM .ub, iteri .u) n Φ.w à gauche dans Buffer b) sinon adjoindre iter2 n Φ.w à gauche dans Buffer
3.4. iter2 = iter2.pred
3.5. retour du « tant que » 3
4. Raccorder Buffer à droite de Φ. LV
5. FIN

Claims

REVENDICATIONS
1 - Procédé permettant de générer un détecteur de comportements redoutés spécifiés en logique temporelle linéaire métrique d'un système dont le comportement est à surveiller caractérisé en ce qu'il comporte au moins les étapes suivantes mises en œuvre par un processeur :
• définir des variables caractéristiques du système à surveiller,
• définir un certain nombre de propositions (P1, ..., pn} sur ces variables,
• définir la date de début d'observation : T_origine, • choisir une option sur la certitude initiale des formules
• allouer en mémoire du détecteur un espace suffisant pour mémoriser un instantané relatif à ces propositions c'est-à-dire allouer une variable réelle notée Lt et n variables booléennes pour chaque proposition de {p-i, ..., pn}, si Pk est une proposition, I. pk dénote la variable booléenne associée à PR,
• définir une formule principale Φ, construite sur lesdites propositions (pi, ..., pn} traduisant un comportement redouté en utilisant un langage composé d'opérateurs logiques et d'opérateurs temporels portant sur le futur et le passé et dont la grammaire BNF est la suivante : φ ::= p | -i φ | φ! Λ φ2 | Cp1 v φ2 | F[a,b] φ I ψi U[a,b] ς>2 I ψi S[a,b]
Φ2 | Cp1 S[a,>] ψ2 | P[a,b] ψ I P[a,>] ψ | ( ψ )
Où p e (p-i, ..., pn} et dont le sens est le suivant : o L'opérateur -i est la négation, -iΦ est vraie à une date t si et seulement si Φ est fausse à cette date t, o L'opérateur Λ est appelé conjonction, la formule Φi Λ Φ2 n'est vraie à une date t que si Φi et Φ2 sont toutes deux vraies à cette date t, o L'opérateur v est appelé disjonction, la formule Φi v Φ2 est vraie à une date t si Φ^ ou Φ2 est vraie à cette date t, o L'opérateur F[a,t>] signifie « dans le futur, entre a et b » ou encore « il y aura entre a et b »,la formule F[a,bj Φ est vraie à une date t si et seulement s'il existe une date entre t+a et t+b où Φ est vraie, o L'opérateur P[a b] signifie « dans le passé, entre a et b » ou encore « il y a eu entre a et b », la formule P[a,bj Φ est vraie en t si et seulement s'il existe une date entre t-b et t-a où Φ est vraie, o L'opérateur P[a >] signifie : « au-delà de -a dans le passé », la formule P[a,>] Φ est vraie en t si et seulement s'il existe une date entre T_origine et t-a où Φ est vraie, o L'opérateur U[a b] signifie : « Φ2 sera vraie entre a et b et Φi sera partout vraie entre temps », la formule Φi U[a,b] Φ2 est vraie en t si et seulement s'il existe une date t' entre t+a et t+b où Φ2 est vraie et que Φi est partout vraie dans l'intervalle [t, t'[, o L'opérateur S[a,b] signifie : « Φ2 sera vraie vers le passé entre -b et -a et Φi sera partout vraie entre temps », la formule Φi S[a b]
Φ2 est vraie en t si et seulement s'il existe une date t' entre t-b et t-a où Φ2 est vraie et que Φi est partout vraie dans l'intervalle ]t\ t], o L'opérateur S[a,>] signifie : « Φ2 sera vraie vers le passé au-delà de -a et Φi sera partout vraie entre temps », la formule Φi S[a,>]
Φ2 est vraie en t si et seulement s'il existe une date t' entre 0 et t-a où Φ2 est vraie et que Φi reste vraie dans l'intervalle ]t', t], • pour chaque sous-formule Ψ de Φ (y compris Φ elle-même), créer une variable notée Ψ.LV de type liste d'intervalles, et l'initialiser à vide, • pour toute sous-formule Ψ de Φ (y compris Φ elle-même) créer une variable booléenne Ψ.val, et l'initialiser à 0, • pour toute sous-formule Ψ de Φ (y compris Φ elle-même) créer une variable de type réel notée Ψ.rel_cert, appelée certitude relative de Ψ, et lui assigner la valeur Cert(Ψ) où Cert est la fonction caractérisée comme suit: o Cert(φ) = 0 si φ est une proposition de {pi , ..., pn}
Figure imgf000075_0001
o Cert(φi Λ φ2) = sup (Cert(φ-ι), Cert(φ2)) o Cert(φi v φ2) = sup (Cert(φ-ι), Cert(φ2)) o Cert(F[a,b] φ) = Cert(φ) + b o Cert(φi U[a,b] Ψ2) = sup (Cert(φi), Cert(φ2) ) + b o Cert(P[a,b] φ) = Cert(φ) - a o Cert (P[a,>] φ) = Cert(φ) - a o Cert(φi S[a,b] 92 ) = sup (Cert(φ1), Cert(φ2) - a) o Cert(φi S[a,>] φ2 ) = sup (Cert(φ1), Cert(φ2) - a) • pour chaque sous-formule Ψ de Φ (y compris Φ elle-même) définir une variable réelle notée Ψ.abs_cert destinée à stocker la certitude absolue de Ψ. Selon l'option choisie pour la certitude des formules, pour chaque formule Ψ sous-formule de Φ, sa variable Ψ.abs_cert associée est initialisée à : o Option 1 : T_origine - Ψ.rel_cert o Option 2 : sup(T_origine, T_origine - Ψ.rel_cert)
• pour chaque sous-formule Ψ de Φ (y compris Φ elle-même) créer une variable notée Ψ.w de type intervalle, appelée fenêtre de continuation de Ψ 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 mémoriser la date de cette acquisition,
• en fonction des valeurs des variables caractéristiques issues de l'acquisition réalisée à l'étape précédente, évaluer la valeur booléenne des propositions et rafraîchir l'instantané I c'est-à-dire assigner la valeur booléenne de p à l.p pour chaque p s {pi, ..., pn} et assigner la date d'acquisition mémorisée à 1.1.
• pour chaque rafraîchissement de l'instantané I tel que réalisé à l'étape précédente, pour chaque sous-formule Ψ de Φ (y compris Φ elle- même), et selon un ordre qui soit tel que toute formule soit traitée après ses sous-formules directes : o Actualiser sa fenêtre de continuation Ψ.w comme suit :
• Si Ψ.w est vide : • Si (l.t - Ψ.rel_cert) > Ψ.abs_cert alors Ψ.w devient : [Ψ.abs_cert, l.t - Ψ.rel_cert] puis affecter à Ψ.abs_cert la valeur (l.t - Ψ.rel_cert)
• Si (l.t - Ψ.rel_cert) < Ψ.abs_cert alors Ψ.w reste l'intervalle vide et Ψ.abs_cert reste inchangé - Si Ψ.w n'est pas vide alors :
• Ψ.w devient :] Ψ.abs_cert, l.t - Ψ.rel_cert]
• Affecter à Ψ.abs_cert la valeur (l.t - Ψ.rel_cert) o calculer de nouveaux intervalles de validité pour Ψ sur sa fenêtre de continuation Ψ.w o exploiter les informations contenues dans la liste de validité de la formule principale Φ et émettre un signal associé. o Attendre un nouveau rafraîchissement de l'instantané
2 - Procédé selon la revendication 1 caractérisé en ce que, si Ψ est une formule purement booléenne l'étape de calcul de ses nouveaux intervalles comporte au moins les étapes suivantes : à toute proposition ou formule purement booléenne Ψ est associée une variable booléenne Ψ.val, si I est l'instantané, l.t correspond à la date portée par I et I. Ψ à la valeur de vérité que I attribue à Ψ, qui est calculée de la façon inductive suivante : si Ψ est une proposition p alors I.Ψ = l.p Si Ψ est -1Ψ1 alors I.Ψ = 1 - I.Ψ1 Si Ψ est ΨI Λ Ψ2 alors I.Ψ = I.Ψ1 * I.Ψ2
Si Ψ est Ψ1 v Ψ2 alors I.Ψ = (I.Ψ1 + I.Ψ2) - (I.Ψ1 * I.Ψ2) initialiser (20) les valeurs de Ψ.val et de Ψ.LV, respectivement à 0 et à liste vide, attendre le rafraîchissement de l'instantané I (21 ), tester ensuite (22) la valeur de vérité I.Ψ:
Si I.Ψ est à 1 le procédé teste, étape (23), la valeur de Ψ.val :
Si Ψ.val est à 1 alors, étape (24), le procédé remplace le dernier intervalle j de Ψ.LV par (j.l, j.lb, l.t, j.u)
Si Ψ.val est à 0 alors, étape (25), le procédé ajoute à la fin de Ψ.LV le nouvel intervalle [l.t, l.t].
Si I. Ψ est à 0, alors le procédé teste la valeur de Ψ.val :
Si Ψ.val est à 1 , étape (26), alors le procédé remplace le dernier intervalle j de Ψ.LV par (j.l, j.lb, l.t, 0) (étape 28). Si Ψ.val est à 0, alors le procédé laisse Ψ.LV inchangé (étape 27). à la suite des étapes (24, 25, 27 et 28), affecter à Ψ.val la valeur actuelle de I.Ψ (29), puis retourner à l'étape (21 ) d'attente de rafraîchissement de I, le calcul se prolongeant tant que le procédé est maintenu en fonctionnement.
3 - Procédé selon la revendication 1 caractérisé en ce que le calcul de nouveaux intervalles pour une formule qui n'est pas purement booléenne est fondée sur une opération propre à chaque opérateur, permettant de composer les listes de validité. 4 - Procédé selon les revendications 1 et 3 caractérisé en ce que, pour les formules non purement booléennes, le calcul des nouveaux intervalles sur la fenêtre de continuation peut-être est effectué de façon plus rapide grâce à une fonction Zl laquelle permet de déterminer, lors du calcul de nouveaux intervalles d'une formule non purement booléenne Φ les plages temporelles à considérer dans les listes de validité des sous-formules directes.
5 - Procédé selon la revendication 1 caractérisé en ce que, si Ψ est sous- formule directe d'une formule Φ, les intervalles de Ψ ayant une influence sur le calcul de la liste de validité de Φ sur sa fenêtre de continuation Φ.w sont ceux qui ont une intersection non vide avec l'intervalle ZI(Ψ,Φ) calculé à l'aide de la fonction Zl définie comme suit :
• ZI(Φ.^Φ) = (-Φ).w
• ZI(Φ-| , (Φ-| Λ Φ2 )) = ZI(Φ2 , (Φi Λ Φ2 )) = (Φi Λ Φ2 ).W • ZI(Φ-| , (Φ-| V Φ2 )) = ZI(Φ2 , (Φ-| V Φ2 )) = (Φ-| V Φ2 ).W
• ZI(Φ, F[a,b] Φ) = (F[a,b] Φ).w Θ [a,b]
• Zl (Φ, P[a,b] Φ) = (P[a,b] Φ).w Θ [-b,-a]
• Zl (Φ, P[a,>]Φ) = (P[a,>] Φ).w Θ [-a, -a]
• ZI(Φi, (Φi UIa,b] Φ2)) = (Φi U[a,b] Φ2).w Θ [a,b] • ZI(Φ2, ^1 U[a,b] Φ2)) = (Φi U[a,bl Φ2)-W Θ [a,b]
• Zl (Φi, (Φi S[a,b] Φ2 )) = (Φi S[a,b] Φ2 ) θ [-b,-a]
• ZI(Φ2j (Φi S[a,b] Φ2 )) = (Φi S[a,b] Φ2 ) Θ [-b,-a]
• ZKΦL (ΦI S[a,>] Φ2 )) = ((Φi S[a,>] Φ2 ).w Θ [-a, -a])
• ZI(Φ2, (Φ1 S[a,>] Φ2 )) = ((Φi S[a,>] Φ2 ).w Θ [-a, -a])
6 - Procédé selon l'une des revendications 1 à 5 caractérisé en ce qu'il comporte en plus les étapes suivantes, après rafraîchissement de l'instantané et calcul de la continuation : • fixer la date absolue d'inutilité Φ.abs_di de la formule principale à la borne supérieure de sa fenêtre de continuation Φ.w. Si Φ.w est vide alors Φ.abs_di n'est pas définie,
• Si la date Φ. abs_di est définie : o attribuer à chaque sous-formule Ψ de la formule principale
Φ sa date absolue d'inutilité propre Ψ.abs_di qui est égale à Φ.abs_di + DI(Ψ) soit la somme de la date fixée pour la formule principale et de la valeur renvoyée par une fonction d'inutilité Dl appliquée à Ψ, o éliminer, pour toute sous-formule Ψ de la principale Φ
(principale comprise), les intervalles de sa liste de validité propre Ψ.LV qui sont antérieurs à sa date d'inutilité absolue propre Ψ.abs_di.
7 - Procédé selon la revendication 1 caractérisé en ce qu'il attribue une date d'inutilité relative à toutes les sous-formules {Φ1; ..., Φn} de la formule principale Φ (y compris elle-même). Cette date est calculée grâce à une fonction d'inutilité Dl laquelle doit satisfaire toutes les contraintes suivantes :
• DI(Φ) = 0 (0 pour la formule principale) Et pour i,j e [1,n]
• DI(Φι) < DIHΦi)
• DI(Φi) ≤ DI(ΦiΛΦj)
• DI(Φj) < DI(ΦiΛΦj)
• DI(Φi) < DI(ΦiVΦj) • DI(Φj) < DI(ΦiVΦj)
• DΙ(Φi) < DI(F[a,b] Φ,) + a
• DI(Φ|) ≤ DI(P[a,b] Φι) -b
• DI(Φ|) < DI(P[a,>] Φι)-a
• DI(Φ|) ≤ DI(Φ| U[a,b] Φj) + a • DI(Φj) < DI(ΦiU[a,b] Φj) + a • DI(Φ,) < DI(Φ, S[a,b] Φj) - b
Figure imgf000080_0001
• DI(Φj) < Dl (Φι S[a,>] Φj) - a Pour éliminer le maximum d'intervalles on pourra choisir comme fonction Dl celle qui assigne pour chaque sous-formule la plus grande la valeur permise par la contrainte la plus forte.
8 - Procédé selon la revendication 1 caractérisé en ce que le signal émis est un signal déclenchant une alarme et/ou un signal de déclenchement d'une commande pour contrôler un processus, ou encore l'émission d'un rapport signalant l'anomalie détectée.
9 - Système permettant de générer un détecteur de comportements redoutés spécifiés en logique temporelle linéaire métrique, à mémoire bornée, 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 adapté à exécuter les étapes du procédé selon l'une des revendications 1 à 10 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 œuvre du procédé pour la formule principale et ses sous- formules,
• Une sortie (1 6) émettant un signal SC correspondant aux informations contenues dans la liste de validité pour la formule principale et émettre ledit signal. 10 - Système selon la revendication 9 caractérisé en ce qu'il comporte un dispositif d'affichage piloté par le signal correspondant aux informations contenues dans la liste de validité pour la formule principale.
11 - Système selon la revendication 9 caractérisé en ce que 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 placé sous la surveillance d'un moniteur généré selon le procédé selon l'une des revendications 1 à 10.
PCT/EP2009/061318 2008-09-02 2009-09-02 Procede et systeme permettant de generer un dispositif de controle a partir de comportements redoutes specifies WO2010026150A2 (fr)

Priority Applications (1)

Application Number Priority Date Filing Date Title
EP09782492A EP2321728A2 (fr) 2008-09-02 2009-09-02 Procede et systeme permettant de generer un dispositif de controle a partir de comportements redoutes specifies

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR0804812 2008-09-02
FR0804812A FR2935500B1 (fr) 2008-09-02 2008-09-02 Procede et systeme permettant de generer un dispositif de controle a partir de comportements redoutes specifies

Publications (2)

Publication Number Publication Date
WO2010026150A2 true WO2010026150A2 (fr) 2010-03-11
WO2010026150A3 WO2010026150A3 (fr) 2010-06-10

Family

ID=40351954

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/EP2009/061318 WO2010026150A2 (fr) 2008-09-02 2009-09-02 Procede et systeme permettant de generer un dispositif de controle a partir de comportements redoutes specifies

Country Status (3)

Country Link
EP (1) EP2321728A2 (fr)
FR (1) FR2935500B1 (fr)
WO (1) WO2010026150A2 (fr)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107728639A (zh) * 2017-09-08 2018-02-23 哈尔滨工程大学 一种时间窗约束下的异构多auv系统任务协调方法

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104057452B (zh) * 2014-06-30 2016-08-24 西北工业大学 类人机器人通用动作调试方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
K. HAVELUND AND G ROSU: "eFFICIENT MONITORING OF SAFETY PROPERTIES" INTERNATIONAL JOURNAL ON SOFTWARE TOOLS FOR TECHNOLOGY TRANSFER (STTT), vol. 6, no. 2, août 2004 (2004-08), pages 158-173, XP002516312 *
O. MALER, D. NICKOVIC, A. PNUELLI: "Checking Temporal Properties of Discrete, Timed and Continuous Behaviors" PILLARS OF COMPUTER SCIENCE, LNCS, vol. 4800/2008, février 2008 (2008-02), pages 475-505, XP002516342 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107728639A (zh) * 2017-09-08 2018-02-23 哈尔滨工程大学 一种时间窗约束下的异构多auv系统任务协调方法

Also Published As

Publication number Publication date
FR2935500B1 (fr) 2018-02-09
EP2321728A2 (fr) 2011-05-18
FR2935500A1 (fr) 2010-03-05
WO2010026150A3 (fr) 2010-06-10

Similar Documents

Publication Publication Date Title
WO2010070142A2 (fr) Procede et systeme pour la fusion de donnees ou d&#39;information
FR3098938A1 (fr) Procédé et dispositif de détermination d’une valeur d’indice de performance de prédiction d’anomalies dans une infrastructure informatique à partir de valeurs d’indicateurs de performance
EP2364467A1 (fr) Procédé de reconnaissance de motifs séquentiels pour procédé de traitement des messages de pannes
CA2505943C (fr) Controle de la robustesse d&#39;une modelisation d&#39;un systeme physique
EP3846046A1 (fr) Procede et systeme de traitement de donnees pour la preparation d&#39;un jeu de donnees
FR2949161A1 (fr) Dispositif pour le diagnostic de systeme
FR3105862A1 (fr) PROCEDE ET système DE SELECTION D’UN MODELE D’apprentissage AU SEIN D’UNE PLURALITE DE MODELES D’apprentissage
WO2010026150A2 (fr) Procede et systeme permettant de generer un dispositif de controle a partir de comportements redoutes specifies
Burns et al. Reasoning about smart city
FR2954537A1 (fr) Procede et dispositif pour la realisation d&#39;une fonction de maintenance.
EP3881515B1 (fr) Système de supervision formelle de communications
Vacura Modeling artificial agents’ actions in context–a deontic cognitive event ontology
CA2314521A1 (fr) Procede de production automatique de specifications
FR2968809A1 (fr) Procede et dispositif permettant de generer un systeme de controle a partir de comportements redoutes specifies
EP3754506A1 (fr) Procédé de validation automatique de cots et dispositif pour la mise en oeuvre du procédé
US11182271B2 (en) Performance analysis using content-oriented analysis
Jegourel Rare event simulation for statistical model checking
EP4033361B1 (fr) Procédé et dispositif de détermination d&#39;au moins une machine impliquée dans une anomalie détectée dans une infrastructure informatique complexe
FR2999318A1 (fr) Procede d&#39;evaluation de la surete de fonctionnement d&#39;un systeme complexe
WO2016016473A1 (fr) Procédé de vérification de traçabilité de premières instructions en un langage de programmation procédurale générées à partir de secondes instructions en un langage de modélisation
Balduccini et al. Reasoning about Smart City
Henriksson Outlier Detection as a Safety Measure for Safety Critical Deep Learning
WO2021185826A1 (fr) Procédé de consolidation d&#39;un ensemble de données pour de la maintenance prédictive et dispositifs associés
Reimanis et al. A study of behavioral decay in design patterns
FR2781584A1 (fr) Systeme de validation par simulation de la specification formalisee des fonctions de systemes complexes

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 09782492

Country of ref document: EP

Kind code of ref document: A2

WWE Wipo information: entry into national phase

Ref document number: 2009782492

Country of ref document: EP

NENP Non-entry into the national phase

Ref country code: DE