• Aucun résultat trouvé

Introduction aux logiques temporelles

2.2.1 Syntaxe et sémantique

Les langages de spécifications logiques incluent un grand ensemble de logiques parmi lesquelles on trouve les logiques temporelles. Nous allons présenter cette logique afin de montrer un exemple de langage de description de propriétés basé sur les méthodes formelles.

Pour présenter un langage, on donne sa syntaxe et sa sémantique. La syntaxe introduit les symboles appartenant au langage et décrit dans quel ordre on peut les agencer pour former des expressions acceptées par le langage. La sémantique quant à elle nous renseigne sur le sens et l’interprétation qu’on peut donner aux expressions.

La logique propositionnelle sera notre point de départ pour introduire les logiques temporelles. Comme le montre la table 2.1, elle dispose d’une syntaxe simple permettant de dire si une proposition est vraie suivant un modèle défini.

φ∶∶= p ∣ ¬φ ∣ φ1∨ φ2 ∣ φ1∧ φ2∣ φ1→ φ2

Table 2.1: Syntaxe de la logique propositionnelle.

de nos propositions. En terme plus concret, le modèle représente la trace collectée par l’IDS et sur laquelle on se base pour valider des propositions et des propriétés. Un modèle et une sémantique permettent d’évaluer une expression et d’affirmer si elle est valide ou fausse. Pour la logique propositionnelle, la sémantique est représentée par une table de vérité des opérateurs (table2.2).

p q ¬p p⋀ q p⋁ q p → q

vrai vrai f aux vrai vrai vrai f aux vrai vrai vrai f aux vrai vrai f aux f aux vrai f aux f aux f aux f aux vrai f aux f aux vrai

Table 2.2: Table de vérité.

La syntaxe de la table 2.1 peut être simplifiée grâce à l’axiome de DeMorgan (φ1 ∧ φ2 ≡ ¬(¬φ1⋁ ¬φ2)) et la définition de → (φ1→ φ2≡ φ1⋁ φ2≡ φ2) pour donner une version simplifiée de la syntaxe à la figure2.3. L’opérateur ¬ définie la négation d’une proposition et l’opérateur ∨ la disjonction entre deux propositions.

φ∶∶= p ∣ ¬φ ∣ φ1∨ φ2

Table 2.3: Syntaxe simplifiée de la logique propositionnelle.

LTL Pour les logiques temporelles, le modèle utilisé sera un système de transition d’états. Un tel choix convient aux comportements que l’on cherche à représenter ; le système à protéger n’étant pas immuable. De ce fait, une proposition n’est valide qu’au moment où le système se trouve dans un état qui la satisfait. Le système de transition représente l’ensemble des états et transitions du modèle à divers moments et chaque état est défini comme l’ensemble des propositions (valeurs et états) qui sont valides. Nous pouvons lire sur la figure 2.1 qu’à l’état 0 les propositions p et q sont valides. La notation σ(i) représente l’état i de notre modèle que nous nommons σ.

p, q r q, r 0 1 2

Figure 2.1: Diagramme de transitions.

Temporal Logic) [44], une version linéaire de la logique temporelle dont la syntaxe et la séman- tique sont données respectivement à la table2.4 et à la table2.5. L’opérateur ◯ signifie que le prochain état du modèle vérifie la proposition qui lui est associée ; et l’opérateur ∪ désigne la validation séquentielle des deux propositions qui lui sont associées.

La sémantique des opérateurs de LTL2.5 est intuitivement définie par :

– la proposition p est valide pour le modèle σ à l’état i, noté σ(i), si et seulement si p appartient à σ(i) ;

– la négation de la proposition φ pour l’état i du modèle équivaut à la négation de la validation de la proposition φ à l’état i du modèle σ ;

– la disjonction de deux propositions temporelles est valide à l’état i si au moins l’une d’elles est valide à l’état σ(i) ;

– la proposition ◯φ est valide si à l’état i + 1 du modèle σ la proposition φ est valide ; – la proposition φ1∪ φ2 est valide pour le modèle σ(i) s’il existe un état k du modèle avec

k≥ i qui valide φ2 et que φ1 soit valide pour tous les états j tel que i ≤ j ≤ k.

φ∶∶= p ∣ ¬φ ∣ φ1∨ φ2 ∣ ◯φ ∣ φ1∪ φ2

σ(i) ⊧ p ssi p ∈ σ(i) σ(i) ⊧ ¬φ ssi ¬(σ(i) ⊧ φ)

σ(i) ⊧ φ1∨ φ2 ssi σ(i) ⊧ φ1∨ σ(i) ⊧ φ2 σ(i) ⊧ ◯φ ssi σ(i + 1) ⊧ φ

σ(i) ⊧ φ1∪ φ2 ssi ∃k ≥ i.σ(k) ⊧ φ2∧ ∀i ≤ j ≤ k.σ(j) ⊧ φ1

Table 2.5: Sémantique de LTL.

Graphe de transition Un graphe de transition est un ensemble de nœuds liés entre eux par des chemins. Chaque nœud représente un état du système et chaque chemin représente la condition nécessaire pour passer d’un état à un autre

La particularité de LTL est qu’elle vérifie la validité d’une propriété sur l’ensemble des chemins possibles du graphe de transition, le rendant efficace pour vérifier la validité d’une propriété sur tout le modèle. On pourrait ainsi vérifier si une propriété p est toujours suivie par une propriété r avec l’expression suivante : σ(0) ⊧ p ∪ r. Avec le modèle de la figure 2.2, cette expression s’évalue à vrai alors que l’expression σ(0) ⊧ q ∪ r y est évaluée à faux. En effet, pour cette dernière formule il existe un chemin qui permet d’avoir une proposition q qui n’est pas suivie par la proposition r. La figure 2.2est un arbre de calcul qui représente l’ensemble des chemins possibles et donc l’ensemble des successions possibles de propositions valides.

p, q q, r r p, q r q, r . . . . r . . . . r . . . . r . . . .

On retrouve aussi les opérateurs ♢ et ◻ qui sont des sucres syntaxiques. La proposition ♢φ désigne l’expression vrai ∪ φ et s’interprète intuitivement comme suit : on trouvera au moins un état du modèle qui vérifie φ. La proposition ◻φ désigne l’expression ¬♢(¬φ) et s’interprète comme suit : qu’importe l’état du modèle φ est toujours vérifié. Bien entendu pour chacun des cas, l’interprétation se fait à partir d’un état défini du modèle. Ainsi, σ(2) ⊧ ◻r est valide vu qu’à l’état 2 du modèle r est toujours valide.

Comme l’illustre l’exemple précédent, un sucre syntaxique est un opérateur à caractère op- tionnel étant donné que l’opération qu’il représente peut être reproduite avec l’aide d’un ou de plusieurs autres opérateurs.

L’obligation de devoir satisfaire la formule sur tous les chemins possibles est utile pour s’assurer du respect d’une propriété quelque soit l’exécution du système. Cependant, suivant le contexte, il arrive qu’une règle soit de la forme : "existe-t-il un chemin qui valide telle propriété ?". Prenons un administrateur qui vient d’interdire l’accès vers une imprimante, et qui pour s’en assurer souhaite vérifier la propriété "existe-t-il un moyen d’accéder à cette imprimante ?". En avoir la preuve formelle lui serait fortement utile !

CTL Computation Temporal Logic (CTL) [44], une version améliorée de LTL usant des quantificateurs nous permet d’exprimer des formules comme : "existe-t-il un chemin qui valide telle formule ?". Sa syntaxe et sa sémantique sont présentées respectivement par les figures2.6 et2.7. Les ajouts apportés par CTL à la syntaxe de LTL sont les quantificateurs universel ∀ et existentiel ∃ associés aux opérateurs de la logique temporelle. Cela permet d’exprimer des formules comme σ(0) ⊧ ∃ ◻ r qui intuitivement se lit : existe-t-il dans le modèle σ un chemin sur lequel r est toujours vrai ? Un autre exemple serait : σ ⊧ ∀ ◻ (p → ∃♢q), se traduisant par : pour tous les chemins possibles, après chaque proposition p valide il existe un chemin qui mène vers un état qui valide la proposition q.

φ∶∶= p ∣ ¬φ ∣ φ ∧ φ ∣ φ ∨ φ ∣ φ → φ ∣

∀◯φ ∣ ∃◯φ ∣ ∀♢φ ∣ ∃♢φ ∣ ∀ ◻ φ ∣ ∃ ◻ φ φ∶∶= ∀[φ ∪ φ] ∣ ∃[φ ∪ φ]

Table 2.6: Syntaxe de CTL.

Les ajouts apportés par CTL à la sémantique de LTL intuitivement s’interprètent comme suit : – ∀◯φ, qu’importe le prochain état du modèle choisi, la proposition φ y est toujours

satisfaite ;

– ∃◯φ, parmi les chemins possibles, il en existe un dont tous les prochains états vérifient φ;

σ(i) ⊧ p ssi p ∈ σ(i) σ(i) ⊧ ¬φ ssi ¬(σ(i) ⊧ φ)

σ(i) ⊧ φ1∨ φ2 ssi σ(i) ⊧ φ1∨ σ(i) ⊧ φ2 σ(i) ⊧ ◯φ ssi σ(i + 1) ⊧ φ

σ(i) ⊧ φ1∪ φ2 ssi ∃k ≥ i.σ(k) ⊧ φ2∧ ∀i ≤ j ≤ k.σ(j) ⊧ φ1 σ(i) ⊧ ∀◯φ ssi ∀i ∈ σ.σ(i) ⊧ ◯φ

σ(i) ⊧ ∃◯φ ssi ∃i ∈ σ.σ(i) ⊧ ◯φ σ(i) ⊧ ∀(φ1∪ φ2) ssi p ∈ σ(i)

σ(i) ⊧ ∃(φ1∪ φ2) ssi p ∈ σ(i)

Table 2.7: Sémantique de CTL.

– ∀(φ1∪ φ2) toutes les exécutions possibles du modèle vérifient la propriété : (φ1∪ φ2) ; – ∃(φ1∪ φ2) Il existe une exécution possible du modèle qui vérifie la propriété : (φ1∪ φ2) . Notons que CTL n’arrive pas à exprimer certaines propriétés que LTL énonce sans trop de difficultés. Prenons l’exemple LTL suivant : σ(i) ⊧ ♢p → ♢q, qui se transcrit comme suit : si un état vérifie p, alors tous les chemins partant de cet état possèdent un état qui valide q. On peut essayer d’exprimer le même exemple avec l’expression CTL suivante : σ(i) ⊧ ∀♢p → ∀♢q. Cependant, elle n’exprime pas la même chose comme le montre la transcription suivante de la formule CTL : tous les chemins ont au moins un état qui vérifie p, alors tous les chemins ont au moins un état qui vérifie q. Notez qu’on a perdu l’existence de chemins qui ne contiennent pas p et la succession des propositions p et q. Cette autre formule CTL ne résout pas le problème elle aussi : σ ⊧ ∀ ◻ (p → ∃♢q). Elle se lit comme suit : si un état vérifie p, alors il existe un chemin partant de cet état qui possède un état qui valide q.

CTL* Afin de résoudre ce problème d’expressivité, CTL* [44] est introduit. Il s’agit est une variante de CTL plus expressive que cette dernière et LTL, tout en conservant les attributs propres à ces deux versions. Sa syntaxe et sa sémantique sont présentées respectivement par les figures 2.8et2.9.

φ∶∶= ¬φ ∣ φ ∨ φ

α∶∶= φ ∣ ¬α ∣ α ∨ α ∣ α ∪ α ∣ ◯α ∣ ∀[α] ∣ ∃[α]

Table 2.8: Syntaxe de CTL*.

Le langage Computation Temporal Logic * (CTL*) apporte comme ajout majeur à la syntaxe de LTL, la possibilité de faire appel à un quantificateur universel ou existentiel sans l’associer

σ(i) ⊧ p ssi p ∈ σ(i) σ(i) ⊧ ¬φ ssi ¬(σ(i) ⊧ φ)

σ(i) ⊧ φ1∨ φ2 ssi σ(i) ⊧ φ1∨ σ(i) ⊧ φ2 σ(i) ⊧ ◯φ ssi σ(i + 1) ⊧ φ

σ(i) ⊧ φ1∪ φ2 ssi ∃k ≥ i.σ(k) ⊧ φ2∧ ∀i ≤ j ≤ k.σ(j) ⊧ φ1 σ(i) ⊧ ∀◯φ ssi ∀i ∈ σ.σ(i) ⊧ ◯φ

σ(i) ⊧ ∃◯φ ssi ∃i ∈ σ.σ(i) ⊧ ◯φ σ(i) ⊧ ∀(φ1∪ φ2) ssi p ∈ σ(i)

σ(i) ⊧ ∃(φ1∪ φ2) ssi p ∈ σ(i)

Table 2.9: Sémantique de CTL*.

obligatoirement à un opérateur temporel. La formule que CTL ne pouvait exprimer s’énonce comme suit avec CTL* : π ⊧ A[F p → F q]. La formule se lit intuitivement comme suit : tous les chemins doivent respecter la propriété suivante F p → F q.

La sémantique de CTL* reprend celle de CTL en y ajoutant les expressions suivantes : – ∀◯φ, qu’importe l’état du modèle choisi, son prochain état valide la proposition φ ; – ∃◯φ, il existe un état du modèle ayant un état qui le suit validant la proposition φ ; – ∀(φ1∪ φ2), toutes les exécutions possibles du modèle vérifient la propriété : (φ1∪ φ2) ; – ∃(φ1∪φ2), Il existe des exécutions possibles du modèle qui vérifient la propriété : (φ1∪φ2). Remarque Les logiques temporelles permettent d’exprimer certaines propriétés très utiles. Avec la syntaxe de CTL nous pouvons énoncer les propriétés suivantes :

– l’accessibilité qui donne la certitude qu’une situation donnée sera atteinte : σ(0) ⊧ ∃♢p ; – l’invariance qui montre qu’une propriété est satisfaite par tous les états du système :

σ(0) ⊧ ∀ ◻ p ;

– la sûreté qui indique que quelque chose de mauvais n’arrivera jamais : σ(0) ⊧ ∀(¬♢p) ; – la vivacité qui assure l’absence de blocages : σ(0) ⊧ ∀ ◻ (p → ♢q) ;

– l’équité qui assure qu’une séquence se fera toujours : σ(0) ⊧ ∀(◻♢p → ◻♢q). 2.2.2 Variantes de LTL

Il existe une foule de variétés de logiques temporelles, chacune avec sa propre spécificité. De nouvelles notions venant chaque fois enrichir ce formalisme, le rendant plus expressif ou plus adapté à certains besoins. Pour illustrer cela, nous présentons ci-dessous trois de ces variantes.

MTL Afin de spécifier les propriétés d’un système en temps réel, nous avons besoin de les exprimer avec une notion temporelle quantitative et de les lier à l’occurrence d’un évé- nement. Pour ce faire, MTL (Metric Temporal Logic) [23] se base sur la logique tempo- relle standard et transforme les opérateurs temporels qualitatifs en opérateurs temporels quantitatifs. L’ajout majeur est une fonction de distance permettant d’évaluer la dis- tance entre deux points temporels. En plus de l’opérateur < pour la comparaison des points temporels, l’opérateur d ∶ (T, T′) est introduit pour évaluer la distance entre deux références temporelles. Enfin, le temps devant être une notion globale commune à tous les composants, on spécifie que l’opérateur < doit être une fonction totale.

K-LTL Parfois, spécifier des propriétés d’un système nécessite de connaître l’information dont disposent les agents et les composants de ce dernier. C’est le cas avec le protocole de sécurité à clés publiques Needham-Schroeder. L’usage de K-LTL (Knowledge - Linear Temporal Logic) [15] permet de décrire ce protocole à clés publiques.

Pour ce faire sa syntaxe utilise l’ensemble des propositions ϕ = {p, q, r, . . .} et un en- semble µ (µ = {1, . . . , n}) contenant l’ensemble des agents à inclure dans la validation des propriétés. K-LTL ajoute aussi à la syntaxe la possibilité de définir l’acquisition d’une connaissance A par un des agents i du système avec la syntaxe KiA. Cette expression se définit intuitivement comme suit : l’agent i dispose de la donnée A.

Aussi, à chaque état du modèle on associe une référence temporelle. De ce fait, la no- tation σ(i, t) s’interprète intuitivement comme suit : l’état i du modèle σ au moment t. L’expression σ(0, t) ⊧ p → KδA indique que si la propriété p est valide à l’état 0 du modèle, à l’instant t, alors l’agent δ dispose de la donnée A.

TPTL Enfin, TPTL [24] est une version propositionnelle de LTL, où chaque état est associé à un référentiel temporel afin de désigner le moment d’exécution d’un événement. Cette association entre propositions et points temporels se fait grâce au Freeze quantification qui symbolise un point dans le temps et est précédé de la formule qui lui est associée. Par exemple : ◻x.(p → ◇y.(q ∧ y ≤ x + 10)) exprime que si la proposition p est valide à un moment x alors, la proposition r doit être validée avant que ne s’écoule une période de dix unités de temps. Cet opérateur pour quantifier le temps est le principal ajout qu’apporte la syntaxe de TPTL. Cela implique l’usage de variables temporelles {x, y, . . .}, et les opérateurs ≤ et ≡ sont introduits afin de pouvoir effectuer des comparaisons avec les variables temporelles.

Documents relatifs