Why You Ought To Use Formal Methods: a 3-Pages 11-Slides Illustration Eric Jaeger, UPMC / LIP6 Réunion SSURF du 5 avril 2007
Introduction Objectif de la présentation Démarche Convaincre de l’intérêt des méthodes formelles Démarche Présenter un problème concret et simple Proposer un algorithme pour répondre à ce problème Analyser l’apport d’une conception réfléchie Analyser l’apport du test Analyser l’apport des méthodes formelles Présentation élémentaire, non destinée à des spécialistes
Présentation du problème A l’origine du problème, un cas concret relatif à l’analyse de configuration d’un garde-barrière (firewall) Des commandes Accept ou Drop, associée à des conditions sur les adresses, les ports, les flags, et exécutées séquentiellement On veut comparer des configurations (Sont elles égales ? L’une est-elle strictement plus permissive que l’autre ?) La conception mène à la définition d’intervalles d’entiers et d’unions d’intervalles d’entiers Un intervalle d’entier représente une plage d’adresses ou de ports ; c’est un ensemble convexe Une union d’intervalles représente un ensemble de plages ; elle permet de représenter des ensembles non convexes On se pose la question de l’égalité de deux unions d’intervalles
Représentation et sémantique Un intervalle est représenté par un couple d’entiers [a,b], on définit x ∈ (a,b) ⇔ a≤x≤b (fermé, car on veut pouvoir représenter [#0,#FFFF]) [a,b] avec a>b représente un intervalle vide Une union d’intervalle est représentée par une liste d’intervalles (I1,I2,…,In), on définit x ∈ (I1,I2,…,In) ⇔ ∃k, 1≤k≤n ∧ x ∈ Ik L’égalité extensionnelle n’est pas l’égalité structurelle a b a1 b1 a2 b2 b3 a3 a4 b4 EXT STR
Problèmes des représentations multiples Pour les intervalles comme pour les unions d’intervalles, on peut avoir de multiples représentations d’un même ensemble Nombreuses représentations d’un intervalle vide : [3,2]=[5,1]=[10,8] Nombreuses représentation de toute union d’intervalles (on peut changer l’ordre, décomposer ou fusionner des intervalles, ajouter des intervalles vides) Ceci pose des problèmes d’encombrement et d’efficacité Mémoriser des intervalles vides ou des intervalles redondants est un gaspillage de ressources Les algorithmes ne peuvent pas être optimisés L’égalité extensionnelle est difficile à analyser : pour x allant de Min à Max, vérifier que x est dans l’union U1 si et seulement si x est dans l’union U2
Notion de forme normale On cherche donc à définir pour les intervalles et les unions une « forme normale », compacte, unique Forme normale d’un intervalle [a,b] avec a≤b est l’ensemble des valeurs x tel que a≤x≤b [1,0] est la forme normale de l’intervalle vide La génération de la forme normale est triviale Forme normale d’une union d’intervalles Trier, éliminer les intervalles vides, fusionner les intervalles La génération de la forme normale est non triviale, mais simple Conjecture : l’égalité extensionnelle de deux unions se ramène à l’égalité structurelle de leur forme normale Egalité extensionnelle : U1=U2 ⇔ (x ∈ U1 ⇔ x ∈ U2) Egalité structurelle : (I1,I2,I3…In)=(J1,J2,J3…Jm) ⇔ n=m et Ik=Jk pour tout k
Génération de la forme normale d’une union b1 a2 b2 a3 b4 a5 b5 a4 On cherche à trouver la forme normale d’une union, i.e. la liste « optimale » d’intervalles avec les mêmes éléments Tri selon le critère [a,b]≤[a’,b’] ⇔ a≤a’ Elimination des intervalles vides a1 b1 a2 b2 a3 b4 a5 b5 S’il y a intersection entre Ik et Ik+1 [a,b]∩[a’,b’] ⇔ a’≤b Alors fusionner Ik et Ik+1 [a,b]∪[a’,b’]=[min(a,a’),max(b,b’)] a1 b1 a5 b2
Propriété de la forme normale d’une union On note ⇓U la forme normale de U (obtenue par cet algorithme) Quelques propriétés « simples » et prouvables ⇓U contient moins d’intervalles que U Deux intervalles successifs [a,b] et [a’,b’] de ⇓U vérifient a≤b<a’≤b’, donc ⇓U est triée, ne contient aucun intervalle vide, et deux intervalles de ⇓U sont toujours disjoints ⇓ est idempotente, i.e. ⇓U=⇓⇓U (égalité structurelle) U et ⇓U contiennent les mêmes éléments (égalité extensionnelle), i.e. x ∈ U ⇔ x ∈ ⇓U ⇓U1=⇓U2 ⇒ (x ∈ U1 ⇔ x ∈ U2), l’égalité structurelle des formes normales garantit l’égalité extensionnelle La preuve de ces propriétés donne confiance dans l’algorithme Elles ne semblent pas toutes testables
Conjecture sur l’égalité Notre conjecture affirme aussi que l’égalité extensionnelle implique l’égalité structurelle des formes normales (x ∈ U1 ⇔ x ∈ U2) ⇒ ⇓U1=⇓U2 Informellement, on peut avoir confiance dans l’algorithme conçu avec soin Le test ne permet pas, a priori, d’augmenter notablement le niveau de confiance La preuve, par contre, permet d’obtenir une réelle confiance En pratique, on ne peut pas prouver ce résultat… car il est faux. Où est l’erreur ?
Génération de la forme normale d’une union b1 a2 b2 a3 b4 a5 b5 a4 On cherche à trouver la forme normale d’une union, i.e. la liste « optimale » d’intervalles avec les mêmes éléments Tri selon le critère [a,b]≤[a’,b’] ⇔ a≤a’ Elimination des intervalles vides a1 b1 a2 b2 a3 b4 a5 b5 S’il y a intersection entre Ik et Ik+1 [a,b]∩[a’,b’] ⇔ a’≤b Alors fusionner Ik et Ik+1 [a,b]∪[a’,b’]=[min(a,a’),max(b,b’)] a1 b1 a5 b2
Contre-exemple à la conjecture Union U1 d’un unique intervalle non vide, U1=⇓U1 a’ a b b’ Union U2 de deux intervalles non vides, disjoints et triés, U2=⇓U2 b+1 (x ∈ U1 ⇔ x ∈ U2) mais pourtant ⇓U1≠⇓U2 Il y a des cas où la fusion est possible (nécessaire), même en l’absence d’intersection entre les intervalles Raisonnement sur les dessins erroné : ℕ n’est pas dense Cette erreur peut-elle être détectée par des tests ? Cette erreur est identifiée par les méthodes formelles