Librairie BDD+APRON pour domaines logico-numériques Bertrand Jeannet INRIA Rhône-Alpes January 26, 2009
Architecture typique d un analyseur statique Programme Transformation Équations sémantiques Solveur Domaine Abstrait
Implantation d un treillis abstrait A Représentation des éléments de A, avec γ : A Opérations logiques/ensemblistes: conjonction (borne inf), disjonction (borne sup) test du vide et de l inclusion introduction/élimination d une variable Définition d une sémantique concrète expr : C (D) cond : C C instr : C C Et abstraction dans A cond : A A instr : A A... C { }} { (V D)
Outline La bibliothèque APRON Contexte et Motivations Conception Implantation Résultats La bibliothèque BDD+APRON Sémantique concrète Domaine abstrait BDD+APRON: types de donnée Domaine abstrait BDD+APRON: quelques opérations Démo
Outline La bibliothèque APRON Contexte et Motivations Conception Implantation Résultats La bibliothèque BDD+APRON Sémantique concrète Domaine abstrait BDD+APRON: types de donnée Domaine abstrait BDD+APRON: quelques opérations Démo
Analyse des variables numériques d un programme Nombreux treillis abstraits implémentés Intervalles (... ) Egalités linéaires (Müller-Olm & Seidl) Combinaison des intervalles et égalités (Venet, Feret) Zones et Octogones (Miné, Bagnara & al) Octaèdres (Cortadella) Polyèdres convexes (NewPolka, Parma, PolyLib, CRI) Égalités polynomiales (Müller-Olms & Seidl) Inégalités polynomiales (Bagnara & al, SAS 05) Ellipsoïdes (Feret) Inégalités entre variables (Peron, VMCAI 07)
Fonctionalités et API Fonctionalités Noyau standard de fonctions offertes (union, intersection) Fonctions liées à la sémantique des instructions (affectation par une expression linéaire,... ) + Fonctions plus spécifiques pour des applications particulières (parallélisation automatique) Mais API très diverses! Certaines fonctionnalités de base peuvent manquer Sémantiques concrètes différentes Types de données différents, et trop bas-niveau Complique la diffusion de ces implémentations Difficile de comparer l efficacité de 2 implémentations du même treillis la précision de deux treillis différents
Démarche pour une interface commune Identifier les fonctionnalités de base et une sémantique concrète suffisamment générale Élaborer une interface détaillée (types de données, signatures des fonctions) Implanter une telle interface pour les bibliothèques maintenues par les membres du projet Sous les contraintes suivantes: Satisfaire différents besoins tout en restant générique Souci de minimalité, sans trop pénaliser les performances Minimiser le travail d adaptation d une bibliothèque existante
Outline La bibliothèque APRON Contexte et Motivations Conception Implantation Résultats La bibliothèque BDD+APRON Sémantique concrète Domaine abstrait BDD+APRON: types de donnée Domaine abstrait BDD+APRON: quelques opérations Démo
Choix généraux Choix d architecture: Langage de référence: C Compatibilité avec les threads Mécanisme d exceptions Mécanisme d options: choix d algorithmes,... Signatures fonctionnelles et impératives... Définition d une sémantique concrète Définition des types de donnée de l API (nombres et coefficients, expressions, contraintes,... )
Identification des fonctionnalités Objectifs antagonistes: performance et précision des implantations; confort de l utilisateur et non-duplication de code entre bibliothèques Distinction entre deux niveaux d interface: Niveau 0: on se préoccupe des performances et de la précision; En prise directe avec la bibliothèque sous-jacente Interface minimale, sauf si avantage algorithmique fort à y inclure une combinaison Niveau 1: on se préoccupe du confort, et des fonctionnalités factorisables entre les domaines abstraits.
Outline La bibliothèque APRON Contexte et Motivations Conception Implantation Résultats La bibliothèque BDD+APRON Sémantique concrète Domaine abstrait BDD+APRON: types de donnée Domaine abstrait BDD+APRON: quelques opérations Démo
Vue générale Underlying libraries & abstract domains box intervals octagons octagons NewPolka convex polyhedra linear equalities PPL 0.9 + Wrapper convex polyhedra linear congruences Abstraction toolbox scalar & interval arithmetic linearization of expressions fall-back implementations C API OCaml binding C++ binding Data-types Coefficients Expressions Constraints Generators Abs. values Developer interface Semantics: A γ (Z n R m ) dimensions and space dimensionality Variables and Environments Semantics: A γ (V Z R) User interface
Domaines disponibles ( Z p IR q ) inégalités polynômiales égalités polynômiales inégalités linéaires congruences (NewPolka + PPL) inégalités linéaires (NewPolka, PPL) (polyèdres convexes) congruences linéaires (PPL) octaèdres inégalités sur 2 variables octogones (octagon) intervalles (box) égalités linéaires (NewPolka) congruences simples
Outline La bibliothèque APRON Contexte et Motivations Conception Implantation Résultats La bibliothèque BDD+APRON Sémantique concrète Domaine abstrait BDD+APRON: types de donnée Domaine abstrait BDD+APRON: quelques opérations Démo
Une meilleure API De plus haut niveau Les variables ( x, y ) remplacent les dimensions ( 0, 1 ) Expressions non-linéaires Sémantique des opérations entières et flottantes Et relativement stable: ajout récent des expressions non-linéaires sans remise en cause de choix antérieurs Une seule ligne dans un analyseur pour le choix d un domaine La connexion d une bibliothèque existante est économique (pour les deux domaines de la PPL, 4200 LOC)
Bénéfice Avantages pour un programmeur client: Interface unifiée et de plus haut niveau pour expérimenter, comparer, combiner des domaines abstraits Avantages pour l implanteur d un nouveau domaine: Possibilité de se concentrer sur les fonctionnalités de base, et de bas niveau Aide fournie par les fonctionnalités génériques Diffusion et expérimentation de son travail facilitées
Diffusion Base d utilisateurs externes encourageante: réclamations, signalement de bugs,... ProVal/Démons, LRI Orsay, France; Analysis of Computer Systems Group, New-York University, USA; Sierum software analysis platform, Kansas State University, USA; NEC Labs, Princeton, USA; EADS CCR, Paris, France; IRIT, Toulouse, France. Plusieurs contributeurs externes déclarés
Outline La bibliothèque APRON Contexte et Motivations Conception Implantation Résultats La bibliothèque BDD+APRON Sémantique concrète Domaine abstrait BDD+APRON: types de donnée Domaine abstrait BDD+APRON: quelques opérations Démo
Motivations Le moindre programme manipule des variables booléennes! On ne peut pas se contenter d analyses séparées: les variables booléennes et numériques interagissent: b := x>y; x := 0;... if b then y := x+1; else z := y+x; endif; z := if b then y+1 else y; Il faut distinguer: L abstraction des types de données (booléens, numériques) Leur couplage Cette distinction permet de définir un couplage indépendent du domaine numérique considéré (interfacé à APRON)
Outline La bibliothèque APRON Contexte et Motivations Conception Implantation Résultats La bibliothèque BDD+APRON Sémantique concrète Domaine abstrait BDD+APRON: types de donnée Domaine abstrait BDD+APRON: quelques opérations Démo
Types de donnée Types finis Booléens Types énumérés Entiers (signés ou non) codés sur N bits Types numériques (APRON) Entiers Réels (permet d émuler les flottants) Sémantique d une valeur abstraite γ : A ( V (B E t I n ) (Z R) ) Valeurs abstraites typées par un environnement V Type
Expressions typées Booléennes bexpr ::= true false bvar expr = expr iexpr ( < <= ) iexpr aexpr ( < <= ) aexpr not bexpr bexpr (and or... ) bexpr Énumérée eexpr ::= label evar if bexpr then eexpr else eexpr Entier borné iexpr ::= cst ivar - iexpr iexpr ( + - * ) iexpr iexpr ( << >> ) n if bexpr then iexpr else iexpr Arithmétique (APRON) aexpr ::= coeff avar ( - sqrt cast) typ,rmode aexpr aexpr ( + - * / % ) typ,rmode aexpr if bexpr then aexpr else aexpr
Opérations sur les valeurs abstraites Opérations ensemblistes Intersection avec une expression booléenne (contrainte) Affectation/Substitution d une variable par une expression parallèle de variables par des expressions Oubli d une variable (quantification existentielle) Changement d environnements (introduction de variables/projections)
Outline La bibliothèque APRON Contexte et Motivations Conception Implantation Résultats La bibliothèque BDD+APRON Sémantique concrète Domaine abstrait BDD+APRON: types de donnée Domaine abstrait BDD+APRON: quelques opérations Démo
Domaine abstrait On suppose (R n ) A N (domaine APRON) Choix effectué Pas d abstraction des types finis Couplage précis des types finis vers les numériques (B m R n ) B m (R n ) B m A N Autre choix possible (non implémenté) Pas d abstraction des types finis Couplage minimal entre types finis et numériques (B m R n ) (B m ) (R n ) (B m ) A N
Représentation des valeurs abstraites f B m A N représenté par Un MTBDD (ADD dans la librairie CUDD) (C) Représente des fonctions B m N Généralise les BDDs (B m B) Table de correspondance globale N A N (OCAml) Implications Hachage de valeurs abstraites APRON Test d égalité (cher!) Comptage de référence pour gérer la table globale. Exemples B B P Conjonction B P x 1 b 0 + b1 + x 1
Représentation des expressions Expressions Booléennes f : B m ACond B : BDDs avec décisions : conditions atomiques feuilles : constantes booléennes Condition atomique: variable booléenne ou contrainte arithmétique Expressions de type énuméré ou entier borné f : B m ACond B p tableau de BDDs Expressions de type arithmétique f : B m ACond AExpr : MTBDDs avec décisions : conditions atomiques feuilles : expressions arithmétiques atomiques Expression arithmétique atomique: expression sans if-then-else
Outline La bibliothèque APRON Contexte et Motivations Conception Implantation Résultats La bibliothèque BDD+APRON Sémantique concrète Domaine abstrait BDD+APRON: types de donnée Domaine abstrait BDD+APRON: quelques opérations Démo
Opérations ensemblistes borne inf ou borne sup f g = mapop2(, f, g) défini ainsi b i b i = f f + g g + b i f g f + g + b i b j = f f + g g + f g b i f + g si i < j f t g t = hash(lookup(f t ) lookup(g t )) mapop2 : ( abs * abs -> abs) -> abs mtbdd * abs mtbdd -> abs mtbdd
Opérations ensemblistes Oubli (projection) d une variable de type fini (booléenne) si i < j b i b j : f b j : f + b j : = f f + f f + si i = j f si i > j Autre technique On met f sous la forme k f k t k On calcule f = k ( b i : f k ) t k On reconstruit k ite(f k, t k, ) b i
Opérations ensemblistes Oubli (projection) d une variable numérique x k : f = mapop1( x k, f ) défini ainsi x k : b i f f + = b i x k : f x k : f + x k : f t = hash( x k : lookup(f t )) mapop1 : ( abs -> abs) -> abs mtbdd -> abs mtbdd
Intersection avec une formule booléenne Formule sans contrainte arithmétique f c c = f ite(c,, ) Condition numérique élémentaire f c acond = mapop1( c acond, f )
Intersection avec une formule booléenne Formule générale b i b i = f f + c c + b i f c c f + c c + f c acond c c + (f c acond) c c + = (f c acond) c c f c 1 = f f c 0 =
Outline La bibliothèque APRON Contexte et Motivations Conception Implantation Résultats La bibliothèque BDD+APRON Sémantique concrète Domaine abstrait BDD+APRON: types de donnée Domaine abstrait BDD+APRON: quelques opérations Démo