• Aucun résultat trouvé

3.9 Validation de GeNoC

4.1.2 La logique de ACL2[KMM02]

Dans ACL2, l’utilisateur peut fournir des d´efinitions de fonctions qui peuvent ˆetre simples ou r´ecursives, `a l’aide de la commande “defun”, ainsi que les propri´et´es `a prouver sous forme de th´eor`emes (`a l’aide de la commande “defthm”). Lors d’un “´ev´enement” (par exemple la preuve d’un th´eor`eme, ou la d´efinition d’une fonction), celui-ci est ajout´e au monde logique en tant que r`egle. Il existe un ´etat initial qui ne contient que les r`egles fournies avec ACL2. Comme son pr´ed´ecesseur Nqthm2

, ACL2 utilise la logique du premier ordre, sans quantificateur, et avec ´egalit´e. ACL2 est non typ´e, mais des pr´edicats peuvent ˆetre utilis´es pour tester le typage des fonctions et des variables.

4.1.2.1 Le moteur de raisonnement

La Figure 4.1 montre l’organisation du d´emonstrateur. Les formules `a prouver sont d´epos´ees dans un “pool”. La conjecture `a prouver est initialement la seule formule dans le pool. Cette formule sera consid´er´ee comme le but `a prouver. Chacune des m´ethodes sera utilis´ee afin d’essayer de prouver le but. La technique utilis´ee `a chaque ´etape peut r´eussir `a prouver la formule, g´en´erer plusieurs sous-formules, ou ´echouer. Dans le cas de la g´en´eration de plusieurs sous-formules, elles seront d´epos´ees dans le pool. Chacune sera consid´er´ee comme ´etant un but (sous-but `a proprement parler). La preuve du but principal reviendra donc `a la v´erification de chacun de ces sous buts. Les techniques utilis´ees successivement sont :

– La simplification : Elle est le cœur du d´emonstrateur des th´eor`emes. Les principales m´ethodes utilis´ees pour la simplification sont :

– Les r`egles du calcul propositionnel, l’´egalit´e, et les proc´edures de d´ecision de l’arithm´etique lin´eaire rationnelle.

– Les informations de typage.

– La r´e´ecriture de chaque sous terme dans le contexte appropri´e en utilisant les d´efinitions, les r´e´ecritures conditionn´ees et les m´eta-fonctions.

– L’utilisation de la normalisation du calcul propositionnel.

4.1 : Rapide pr´esentation d’ACL2 45

– L’´elimination des destructeurs : Des fonctions dites destructives en ACL2 (notam-ment “CAR” et “CDR”3

) sont ´elimin´ees au profit de nouvelles variables.

Exemple : si dans une fonction les termes (CAR A) et (CDR A) sont utilis´es, A est une liste : A sera remplac´ee par (cons A1 A2), (CAR A) sera remplac´e par A1 et (CDR A) par A2.

– L’utilisation des ´equivalences :

Cette ´etape essaie d’utiliser les ´equivalences qui apparaissent dans l’hypoth`ese pour les appliquer au but. Si la formule contient l’hypoth`ese (equal LHS RHS), chaque fois que LHS sera rencontr´e, il pourra ˆetre remplac´e par RHS.

– La g´en´eralisation :

Cette technique g´en´eralise le but. L’heuristique de base consiste `a trouver un sous terme qui apparaˆıt dans l’hypoth`ese et la conclusion, ou dans deux hypoth`eses dif-f´erentes, ou des deux cˆot´es d’une ´equivalence puis le remplacer avec une nouvelle variable ce qui g´en´eralise la formule.

Figure 4.1 – Moteur du raisonnement [KMM02]

– L’´elimination des termes non pertinents :

Elle est la derni`ere `a ˆetre utilis´ee avant l’induction pour ´eliminer les hypoth`eses in-utiles (par exemple des hypoth`eses sur des variables qui ont disparu), en particulier apr`es une ´etape de g´en´eralisation.

– L’induction :

Une induction math´ematique est utilis´ee : il existe un (ou plusieurs) cas de base, et le pas d’induction. Les fonctions r´ecursives utilis´ees dans la formule `a prouver guident le d´emonstrateur pour choisir les variables sur lesquelles l’induction pourra ˆetre effectu´ee.

3. CAR est une fonction primitive de Common LISP qui renvoie le premier ´el´ement d’un CONS, et CDR retourne le reste.

4.1.2.2 Le principe de l’encapsulation

L’encapsulation est un principe d’extension, largement utilis´e dans le mod`ele GeNoC, qui permet d’introduire des symboles de fonctions et de construire des th´eories pour ces fonctions, sans avoir `a les d´efinir. Ceci nous permet dans une certaine mesure de simuler le raisonnement et la quantification sur des fonctions. Il permet de pr´esenter une classe de fonctions ayant un ensemble de propri´et´es en commun. Ces propri´et´es sont consid´er´ees comme des contraintes.

Une macro,“defspec”(voir exemple listing 4.1), existe pour la construction d’une telle “encapsulation”. Dans le listing 4.1, un seul symbole de fonction f (ici d’arit´e 3) est

introduit. Autant de symboles de fonctions que n´ecessaire peuvent ˆetre introduits.

(defspec nom1 (((f * * *)= >*)) ; ; s y m b o l e de la f o n c t i o n et sa s i g n a t u r e (local (defun f (x y z) (+ x y z))) ; ; d ´e f i n i t i o n du t ´e m o i n (defthm ctr1 ...)) ; ; C o n t r a i n t e

Listing 4.1: Forme G´en´erique d’un Defspec

Pour conserver la coh´erence de la logique d’ACL2, la pr´esentation d’un t´emoin satisfai-sant la(les) contrainte(s), est obligatoire. Ceci garantit qu’il existe au moins une fonction qui satisfait les contraintes. Cette fonction sera d´efinie en tant qu’´ev´enement local (elle ne sera pas connue en dehors du “defspec” dans lequel elle a ´et´e d´efinie.).

L’exemple pr´ec´edent du defspec (listing 4.1) sera admis comme ´ev´enement et ajout´e au monde logique d’ACL2 sous r´eserve que la fonction t´emoin f soit admise, et que le th´eor`eme crt1 soit un th´eor`eme valide dans le monde logique ´etendu par la d´efinition de

f (il pourrait y avoir plusieurs th´eor`emes sp´ecifiant les contraintes sur le ou les symboles de fonctions).

Les seules connaissances surf en dehors du defspec, sont sa signature (plus exactement son arit´e) et les contraintes d´efinies en tant qu’´ev´enements non-locaux. Dans [KM01], Les auteurs pr´ecisent que pour l’exemple ci-dessus, tout th´eor`eme thm1 prouv´e sur f hors du defspec sera prouv´e en se basant sur la contraintectr1. Ainsi, toute fonctiong faisant partie de la classe des fonctions d´efinie par le defspec (qui satisfait la contrainte ctr1), satisfera

thm1. L’utilisation de la macro “definstance” permet de v´erifier qu’une vraie fonction appartient `a la classe de fonctions d´efinie par le “defspec”. Ceci est fait en v´erifiant les contraintes du “defspec”.

Exemple 4.1 D´efinition et instanciation d’un defspec.

D´efinissons une classe de fonctions qui re¸coivent en param`etre une liste, et renvoient en r´esultat une liste qui est une permutation du param`etre. La fonction IsPerm est un re-connaisseur de permutation. Elle prend en entr´ee deux listes et v´erifie que la premi`ere est une permutation de la deuxi`eme.

Le listing 4.2 montre la sp´ecification de cette th´eorie sous forme dedefspec. Dans la pre-mi`ere partie, la signature de la fonction ainsi que le t´emoin sont d´efinis. Puis, le th´eor`eme

Documents relatifs