H. Wertz -- Exécution Symbolique

Slides:



Advertisements
Présentations similaires
IFT359 – Programmation fonctionnelle Thème #8 Création de nouvelles formes syntaxiques 1.
Advertisements

CINI – Li115 1 Semaine 4 Révisions ● Questions de cours ● Types des expressions ● Déclaration de variables ● Instruction conditionnelle et boucles ● Structure.
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
CINI – Li115 1 Semaine 4 Révisions ● Questions de cours ● Types des expressions ● Déclaration de variables ● Instruction conditionnelle et boucles ● Structure.
11 Alternative : syntaxe CSharp la structure conditionnelle : –si condition alors instruction1 sinon instruction2 fin si –En C# : if (condition) { instruction1.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
CINI – Li115 1 Semaine 11 Les pointeurs (suite) ● Tableaux et pointeurs ● Questions sur les pointeurs.
TP 1 BIS Programmation structurée à l’aide de fonctions (FC) et de bloc fonctionnels (FB)
UE2 - M22 Licence acoustique
Les Instructions Itératives (Les Boucles)
Introduction au Langage Pascal
Un Algorithme , c'est Quoi ?
LES TABLEAUX EN JAVA.
Division de la Planification et de la Recherche en Collecte
Détection des erreurs.
Algorithme et programmation
Algorithmique et programmation de modèles numériques
Instructions de contrôle
Techniques de décomposition
Semaine #1 INF130 par Frédérick Henri.
Algorithmique AU El harchaoui noureddine
Lois fondamentales de l'algèbre de Boole
Algorithmique demander jeu du pendu.
Ajouter le code dans une page html
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Information, Communication, Calcul
L’Instruction de Test Alternatif
JAVA et POO : Notion d'héritage
SIF-1053 Architecture de ordinateurs
Javadoc et débogueur Semaine 03 Version A16.
Les Instructions – Organigramme
Un Algorithme , c'est Quoi ?
Bases de programmation en Python
Principes de programmation (suite)
Cyber-Sphinx Séance 2.
VI. Tri par tas (Heap sort)
Semaine #4 INF130 par Frédérick Henri.
Implantation d’un îlot ou d’une Chaîne de Production
L E C ORPS D ’ UN A LGORITHME / P ROGRAMME – L A PARTIE I NSTRUCTION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie.
L’I NSTRUCTION DE T EST A LTERNATIF Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira, Bejaia Année.
L ES I NSTRUCTIONS I TÉRATIVES (L ES B OUCLES ) Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira,
Information, Communication, Calcul
Algorithmique & Langage C IUT GEII S1 Notes de cours (deuxième partie)
Concepts de base de la programmation
Programmation en C++ C++ de base
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
PROGRAMMATION ET ENSEIGNEMENT
LOG770 Annexe A Éléments de probabilité
Exercice : le jeu. Vous devez concevoir l’algorithme permettant de jouer avec votre calculatrice : elle détermine au hasard un nombre caché entier entre.
MINISTÈRE DE L’ENSEIGNEMENT SUPÉRIEUR ET DE LA RECHERCHE SCIENTIFIQUE
Cycle, Cocycle, Arbre et Arborescence
7 Contraintes d’intégrité en SQL
Semaine #2 INF130 par Frédérick Henri.
Les nombres complexes Saison 1 - Épisode 2. Les nombres complexes Saison 1 - Épisode 2.
Le code de Huffman: est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet. Le code de Huffman.
Chapitre 3: Les scriptes
Définition : 2 Les structures de contrôle conditionnelles permettent à un programme de modifier son traitement en fonction d’une condition.
GEOMETRIE VECTORIELLE
ENSEIGNER L’ALGORITHMIQUE ET LA PROGRAMMATION AU COLLÈGE
Programmation Scratch
Opérateurs et fonctions arithmétiques Opérateurs de relation Opérateurs logiques Cours 02.
PROGRAMMATION ET ENSEIGNEMENT
L.P.M Chapitre N°3 Les structures de contrôle itératives Dégager le traitement itératif Problème Nombre d’itération ?? Inconnu à l’avance Connu à l’avance.
Les Définition Les expressions Algebriques
Chapter 11: Récursivité Java Software Solutions Second Edition
Introduction à L’Informatique
Les polynômes Expression algébrique composée de termes liés par des opérations d’addition ou de soustractions. (liés par + et -)
Python Nicolas THIBAULT
PROGRAMMATION SOUS R. PRESENTE PAR : ACHETTOU ISMAIL LAARICH TARIQ ENCADRE PAR : Pr. EXPOSÉ SUR LA PROGRAMMATION SUR R 2.
Transcription de la présentation:

H. Wertz -- Exécution Symbolique D’abord un mini-langage : déclaration de procédure : nom: PROCEDURE (paramètre1, paramètre2, … paramètren) <suite-d’instructions> END; deux types de procédures : fonctions et subroutines (CALL) toute variable a des valeurs entiers : DECLARE var1, vae2, … varn INTEGER opérations de base : + * - … affectation : var := <expression> composition : DO <suite-d’instruction> END opérations booléenne : true, false, <, >, =, , , , & (et), | (ou),  (implique),  (not) conditionnelle : IF <booléen> THEN instruction1 ELSE instruction2 itérative : DO WHILE <booléen>; <suite-d’instructions> END; paramètres par référence, RETURN; (subroutine), RETURN(<expr>); (fonction) Chaque procédure possède 1 return, subroutine CALL nom(a1, a2, … a3); basé sur Hantler et King « an introduction to proving the correctness of programs », IBM Thomas J Watson Research Center, RC 5893, 8.3.76 24/02/2019 H. Wertz -- Exécution Symbolique

H. Wertz -- Exécution Symbolique Assertions des contraintes sur les entrées et sorties peuvent être exprimées par des assertions : assertion d’entrée : ASSUME (<booléen>); exemple: ASSUME (P1 > 0); assertion de sortie : PROVE (<booléen>); exemple: PROVE ((X = Y) & (Y = X)); Un programme est (partiellement) correct si la vérification de l’assertion d’entrée implique la vérification de l’assertion de sortie Relation entre entrée et sortie : assertion 24/02/2019 H. Wertz -- Exécution Symbolique

Un programme exemple (simple) 1 ABSOLUTE: PROCEDURE(X); ASSUME(true); DECLARE X, Y INTEGER; IF X < 0 THEN Y := -X ELSE Y := X PROVE((Y = X | Y = -X) & Y  0 & X = X); RETURN(Y); 9 END; PROVE spécifie à la fois ce que le programme fais et ce qu’il ne fais pas 24/02/2019 H. Wertz -- Exécution Symbolique

Exécution symbolique de ABSOLUTE Un appel typique : ABSOLUTE(); Cas  : <0 test-IF = true  THEN Y:=- Y=- X=X= (-= | -=-)& -0 & =  démontrer: -0 ou <0 Cas  : 0 test-IF = false  ELSE Y:= Y= X=X= (= | =-)& 0 & = démontrer: 0 24/02/2019 H. Wertz -- Exécution Symbolique

équivalent exécution réelle = exécution algébrique Affectation change exemple: X= Y= X:=Y+X  X:= + Y:=3*X-Y  Y:=3+2 CALL et RETURN ne changent pas IF change : soit true, soit false soit indéterminé si indéterminé, alors analyse de cas (pour la preuve et/ou pour trouver des cas impossibles) exemple : IF X<0 THEN Y:=88 IF X=3 THEN Y:=99 Indéterminé si expr. Booléenne sur les variables d’entrées 24/02/2019 H. Wertz -- Exécution Symbolique

Exemple de cas impossible Y:=88 X=3 X=3 impossible … Y:=99 … non oui non oui Exécution symbolique fonctionne sur toutes les entrées possibles (satisfaisant les assertions d’entrée) 24/02/2019 H. Wertz -- Exécution Symbolique

Conditions de chemin (path-condition) La path-condition (PC) donne à tout instant de l’exécution symbolique l’ensemble des valeurs symboliques en vigueur. Exemple : exécution symbolique de IF <bool> THEN <expression1> ELSE <expression2>  eval de <bool> donne B (symbolique)  si PC  B alors <expression1> est toujours exécuté si PC  B alors <expression2> est toujours exécuté si ni B ni B alors continuer en   assumer B et PC:=PCold&B exécuter <expression1>  assumer B et PC:=PCold& B exécuter <expression2> 24/02/2019 H. Wertz -- Exécution Symbolique

exécution symbolique des assertions Exécution symbolique de ASSUME ASSUME(<bool>); 1 eval de <bool> donne B (symbolique) 2 PC:=PCold&B Exécution symbolique de PROVE PROVE(<bool>); 2 si PC  B alors le programme est vérifié sinon le programme est vérifié 24/02/2019 H. Wertz -- Exécution Symbolique

Arbre d’exécution symbolique 1 ABSOLUTE: PROCEDURE(X); ASSUME(true); DECLARE X, Y INTEGER; IF X < 0 THEN Y := -X ELSE Y := X PROVE((Y = X | Y = -X) & Y  0 & X = X); RETURN(Y); 9 END; Arbre fini 24/02/2019 H. Wertz -- Exécution Symbolique

Un 2ème programme exemple (moins simple) 1 GCD: PROCEDURE (M, N) ASSUME (M > 0 & N > 0); DECLARE M,N,A,B INTEGER; A:=M; B:=N; DO WHILE (A = B); IF A > B THEN A:=A-B; ELSE B:=B-A; END PROVE (A=(M,N)); RETURN(A); 14 END Exécution symbolique de DO WHILE similaire à IF (éventuellement arbre infini) (a,b) = pgcd de a et b Axiomes pour PGCD : (a,a) = a si a > 0 (a,b)=(b,a) (a,b)=(a-b,b) 24/02/2019 H. Wertz -- Exécution Symbolique

Arbre d’exécution pour GCD 1 GCD: PROCEDURE (M, N) ASSUME (M > 0 & N > 0); DECLARE M,N,A,B INTEGER; A:=M; B:=N; DO WHILE (A = B); IF A > B THEN A:=A-B; ELSE B:=B-A; END PROVE (A=(M,N)); RETURN(A); 14 END Arbre infini Branche non étiqueté : pc: m>0 & n>0 & m<n & m!=n-m 24/02/2019 H. Wertz -- Exécution Symbolique

Comment éviter les arbres infinis chaque traversée d’une itération peut être marquée par une coupure au moins à un endroit de l’itération : commencer par une coupure et arrêter au RETURN ou à la coupure suivante Associé à chaque coupure un ASSUME et à sa fin un PROVE  on peut démontrer les coupures Preuve du programme devient somme des preuves des coupures 24/02/2019 H. Wertz -- Exécution Symbolique

H. Wertz -- Exécution Symbolique ASSERT ASSERT (<bool>); au premier rencontre, ASSERT joue le rôle d’un PROVE c’est alors une assertion de sortie pour l’exécution symbolique arrivant à la coupure. C’est également une assertion d’entrée, un ASSUME, pour l’exécution symbolique commençant à la coupure. Sinon c’est la dernière instruction d’une coupure, c’est alors une assertion de sortie, un PROVE, qui devient une assertion d’entrée, un ASSUME, pour l’exécution symbolique suivant la coupure 24/02/2019 H. Wertz -- Exécution Symbolique

H. Wertz -- Exécution Symbolique ASSERT (suite) ASSERT Assertion inductive ou prédicat inductive correspond à l’hypothèse dans les preuves par induction 24/02/2019 H. Wertz -- Exécution Symbolique

H. Wertz -- Exécution Symbolique Retour vers GCD 1 GCD: PROCEDURE (M, N) ASSUME (M > 0 & N > 0); coupure2 DECLARE M,N,A,B INTEGER; A:=M; B:=N; DO WHILE (A = B); ASSERT ((A,B)=(M,N) & A  B); coupure7 IF A > B THEN A:=A-B; ELSE B:=B-A; END PROVE (A=(M,N)); RETURN(A); return 14 END 24/02/2019 H. Wertz -- Exécution Symbolique

et l’arbre arrivant à la coupure7 24/02/2019 H. Wertz -- Exécution Symbolique

Ensuite l’arbre à partir de la coupure7 24/02/2019 H. Wertz -- Exécution Symbolique

deuxième version de GCD 1 GCD2: PROCEDURE (M, N); ASSUME (M>0 & N>0); coupure2 DECLARE M, N, A, B, D INTEGER; A := M; B := N; DO WHILE (A  B); ASSERT ((A, B) = (M, N) & A  B); coupure7 D := ABSOLUTE(A-B); if A > B THEN A := D; ELSE B := D; END; PROVE (A = (M, N)); RETURN (A); return 15 END; 24/02/2019 H. Wertz -- Exécution Symbolique

H. Wertz -- Exécution Symbolique première partie ( et retur ) ne change pas L’exécution de  et  return doit refaire l’exécution de ABSOLUTE chaque fois return return 24/02/2019 H. Wertz -- Exécution Symbolique

H. Wertz -- Exécution Symbolique Arbre de GCD2 24/02/2019 H. Wertz -- Exécution Symbolique

H. Wertz -- Exécution Symbolique Sous-procédures On invente des symboles pour chaque variable de la procédure appelante qui risque de changer de valeur par l’appel Au lieu d’exécuter symboliquement le corps de la sous-procédure, les valeurs des variables potentiellement changées sont remplacées par les nouvelles symboles Si la sous-procédure a été démontrée correcte, son assertion de sortie est valide pour ces nouvelles valeurs et donne les informations nécessaires sur ces valeurs pour démontrer le programme Assertions ne décrivent pas tout, mais seulement des aspects. Tout programme est correct par rapport à l’assertion de sortie T. L’information ne dit pas COMMENT mais QUOI : ((Y= | Y =-X) & Y>=0 & X=X ne dit rien sur le COMMENT 24/02/2019 H. Wertz -- Exécution Symbolique

Utiliser les preuves comme des lemmes On crée des sous-procédures abrégées en : Changeant le ASSUME initial en PROVE (sans changer les arguments) Changeant le PROVE final en un ASSUME (sans changer les arguments) Remplaçant le corps de la sous-procédure par une séquence d’affectations (de nouveaux symboles), une pour chaque variable qui peut être altérée par la procédure 24/02/2019 H. Wertz -- Exécution Symbolique

H. Wertz -- Exécution Symbolique ABSOLUTE abrégée 1 ABSOLUTE: PROCEDURE (X); PROVE (T) DECLARE X, Y INTEGER; X := newsymbol(); Y := newsymbol(); ASSUME ((Y=X | Y=-X) & Y0 & X=X); RETURN (Y) 8 END; 24/02/2019 H. Wertz -- Exécution Symbolique

H. Wertz -- Exécution Symbolique Nouvel arbre de GCD2 24/02/2019 H. Wertz -- Exécution Symbolique