Utilisation de Coq pour l étude d algorithmes

Documents pareils
Une introduction rapide à Coq

Vérification de programmes et de preuves Première partie. décrire des algorithmes

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Théorie de la Programmation

Cours 1 : La compilation

Évaluation et implémentation des langages

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Cours de Programmation 2

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Vérification formelle de la plate-forme Java Card

Compilation (INF 564)

Présentation du langage et premières fonctions

Découverte de Python

Utilisation des tableaux sémantiques dans les logiques de description

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

ACTIVITÉ DE PROGRAMMATION

Qualité du logiciel: Méthodes de test

Corrigé des TD 1 à 5

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TP 1. Prise en main du langage Python

Cours d algorithmique pour la classe de 2nde

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

LES TYPES DE DONNÉES DU LANGAGE PASCAL

STAGE IREM 0- Premiers pas en Python

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Cours Composant 2. Qualité logicielle et spécications algébriques

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Enseignement secondaire technique

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours Informatique Master STEP

Algorithmique et programmation : les bases (VBA) Corrigé

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Principes des langages de programmation INF 321. Eric Goubault

Polynômes à plusieurs variables. Résultant

Problèmes liés à la concurrence

Programmation Web. Madalina Croitoru IUT Montpellier

Analyse de sécurité de logiciels système par typage statique

1. Structure d'un programme FORTRAN 95

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Image d un intervalle par une fonction continue

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Programmation C++ (débutant)/instructions for, while et do...while

Spécification et certification d implantation chaînée avec des orbites : les hypercartes combinatoires

Machines virtuelles fonctionnelles (suite) Compilation ML Java

ALGORITHMIQUE ET PROGRAMMATION En C

Formula Negator, Outil de négation de formule.

OPTION SCIENCES BELLE-ISLE-EN-TERRE

Définitions. Numéro à préciser. (Durée : )

Examen Médian - 1 heure 30

Initiation à l algorithmique


Raisonnement par récurrence Suites numériques

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Cours 1 : Qu est-ce que la programmation?

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

Calculabilité Cours 3 : Problèmes non-calculables.

2 Comment fonctionne un ordinateur, dans les grandes lignes

Traduction des Langages : Le Compilateur Micro Java

Conception de circuits numériques et architecture des ordinateurs

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Initiation à la programmation en Python

Notions fondamentales du langage C# Version 1.0

Programmer en JAVA. par Tama

Logique. Plan du chapitre

MIS 102 Initiation à l Informatique

Gestion mémoire et Représentation intermédiaire

Organigramme / Algorigramme Dossier élève 1 SI

Algorithmique I. Algorithmique I p.1/??

Introduction à MATLAB R

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Réalisabilité et extraction de programmes

Logiciel Libre Cours 3 Fondements: Génie Logiciel

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

La persistance des nombres

Section «Maturité fédérale» EXAMENS D'ADMISSION Session de février 2014 RÉCAPITULATIFS DES MATIÈRES EXAMINÉES. Formation visée

Continuité d une fonction de plusieurs variables

Arbres binaires de recherche

Introduction au langage C

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

SOCLE COMMUN - La Compétence 3 Les principaux éléments de mathématiques et la culture scientifique et technologique

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Logiciel Libre Cours 2 Fondements: Programmation

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Contexte et motivations Les techniques envisagées Evolution des processus Conclusion

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

MATHÉMATIQUES 10 e 12 e ANNÉE

Préparation à l examen EFA en Macro

Présentation du Master Ingénierie Informatique et du Master Science Informatique , Année 2 Université Paris-Est Marne-la-Vallée

Transcription:

Utilisation de Coq pour l étude d algorithmes Yves Bertot

Introduction I Structures de données I Programmation de l algorithme I Description de propriétés des données I Démonstration de cohérence

Partie 1: Structures de données I Décrire les cas possibles dans les données I Utiliser une approche structurée I Chaque cas a plusieurs composantes I Certaines composantes sont de même nature que le tout I Diviser pour régner

Description des données par cas Require Import List ZArith. Open Scope Z_scope. Print list. Inductive list (A : Type) : Type := nil : list A cons : A -> list A -> list A I Notation plus intuitive : a::l pour la séquence qui commence par a et continue avec l

Partie 2: Programmation par cas Fixpoint insert (x : Z) (l : list Z) : list Z := match l with nil => x::nil a::l => if Zle_bool x a then x::a::l else a::insert x l end. Fixpoint sort (l : list Z) : list Z := match l with nil => nil x::l => insert x (sort l) end.

Partie 3: Décrire les propriétés des listes I Définir une fonction qui teste si une propriété est satisfaite I Definir un prédicat minimal garantissant les propriétés recherchées I Utiliser le langage d expression logique

Exemple des listes triées Inductive sorted (l : list Z) : Prop := s0 : sorted nil s1 : forall x, sorted (x::nil) s2 : forall x y l, x < y -> sorted (y::l) -> sorted (x::y::l). I Le prédicat qui satisfait ces trois propriétés... I et seulement ces propriétés

Partie 4: Démonstrations I Propriétés intrinsèques des relations et prédicats I Propriétés de l algorithme défini vis-à-vis des relations

Exemple pour la permutation Lemma trans_perm : forall l1 l2 l3, permutation l1 l2 -> permutation l2 l3 -> permutation l1 l3. Proof. intros l1 l2 l3 H H x; rewrite (H x); apply H. Qed.

Propriétés de l algorithme Lemma insert_perm : forall x l, permutation (insert x l) (x::l). Proof. intros x; induction l. intros y; reflexivity. simpl; case (Zle_bool x a). intros y; reflexivity. intros y; simpl; case (Zeq_bool a y); rewrite (IHl y); simpl count; ring. Qed.

Caractéristiques principales I Le choix des structures de données guide la programmation I Les algorithmes sont décrits en couvrant tous les cas I Les propriétés donnent un point de vue différent sur l algorithme I La vérification des propriétés suit une approche similaire au test unitaire I Les vérifications sont exhaustives, vis-à-vis des propriétés énoncées

Utilisation de Coq pour l étude de langages de programmation Yves Bertot

Introduction I Description de langages de programmation I Syntaxe abstraite I Description du comportement des programmes I Relations entre programmes, entrées et sorties, I Fonction exécutant les programmes I Développements d outils d analyse ou de compilation I I Vérification de propriétés Traduction vers un autre langage I Démonstration de propriétés

Partie 1: Syntaxe abstraite I Les programmes sont composés d instructions I Les instructions sont composées d instructions plus petites I Les instructions de base sont composées d expressions I La forme importe peu, la structure importe beaucoup I Décrire la structure avant toute chose

Un tout petit langage Require Import ZArith String. Open Scope Z_scope. Inductive aexpr := var (x : string) add (e1 e2 : aexpr) num (n : Z). Inductive bexpr := lt (e1 e2 : aexpr) and (b1 b2 : bexpr) true false. Inductive instr := i_if (b : bexpr) (i1 i2 : instr) i_seq (i1 i2 : instr) while (b : bexpr) (i : instr) assign (x : string) (e : aexpr) skip.

Partie 2: Le comportement des programmes I Sémantique opérationnelle I Décrire un état ou environnement I Comment chaque forme d instruction opère I Relation entre des programmes et des environnements I Plusieurs approches I Petits pas: chaque exécution élémentaire laisse un programme à continuer I Grands pas: décrire l exécution jusqu à la fin

Sémantique opérationnelle (petits pas) Inductive sms : (instr * env) -> (instr * env) -> Prop := sms_w : forall e b i, eval e b true -> sms (while b i, e) (i_seq i (while b i), e) sms_s1 : forall i1 i1 i2 e e, sms (i1, e) (i1, e ) -> sms (i_seq i1 i2, i_seq i1 i2, e )... I Couvrir tous les cas possibles d instructions et de comportement des sous-instructions I Chaque règle logique reste très simple

Partie 3: Calculs sur des programmes annotés I Calculs sur des assertions dans les programmes I Produire des formules logiques qu il faut prouver (en Coq ou non) I Analyse automatique de programme I Produire des assertions garanties

Exemple de calcul sur les assertions Fixpoint pc (i:instr) (g : assertion) := match i with assign x e => subst x e g i_seq i1 i2 => pc i1 (pc i2 g)... end. I Calculer ce qu il faut assurer avant pour garantir g après l exécution I Exemple sur l affectation x := x + 1 I Supposons que l on veuille garantir x < 3 après l affectation I Donc il suffit que x + 1 < 3 avant l affectation I Remplacer la variable x par l expression x + 1

Construction de formules logiques Fixpoint vc (i : instr) (g : assertion) := match i with while b annot i => (not b & annot --> g)::(b & annot --> pc i annot):: vc i annot... end. I Les annotations dans les boucles doivent être satisfaite au début et à la fin de chaque exécution I Peuvent être utilisée pour garantir la condition finale I Il faut vérifier qu elles sont invariantes

Exemple d analyse statique I Un intervalle pour chaque variable et chaque instruction I Permet de prédire des dépassements de bornes I Calcul symbolique. I x := x + 1 I Si x 2 [0,10] avant, alors x 2 [1,11] après I while (x < 10) fragment I si x 2 [0,100] avant while, alors x 2 [0,9] avant fragment

Partie 4: Prouver qu un analyseur est correct I Un analyseur statique produit un programme annoté I Le programme annoté peut ensuite être traité par un vérificateur d annotations I Il s agit de démontrer que les formules logiques produites par ce dernier sont toujours valides

Preuve de compilateur I La sémantique opérationnelle d un langage fournit un moyen d exécuter les programmes I La compilation fournit un deuxième moyen I Repose sur la sémantique opérationnelle d un second langage I Preuve de correction du compilateur: montrer que les deux moyens d exécuter sont équivalents

Lien avec le cours I La syntaxe abstraite: les types inductifs de Coq I Le comportement: les prédicats inductifs I Les outils d analyse: des fonctions récursives I Les preuves de correction: des preuves dirigées par les buts

Utilisation de Coq pour les mathématiques Yves Bertot

Introduction I Une interaction avec les mathématiques en plein essor I Quelques domaines clefs: cryptographie, arithmétique, algèbre I Un souci de rigueur renforcé par l ordinateur I Vers l utilisation de l ordinateur pour la découverte de nouveaux résultats mathématiques

Quels objets mathématiques en Coq? I Les nombres: entiers, rationnels I Les objets algébriques: polynômes, vecteurs, matrices I Les structures: groupes, anneaux I Les objets axiomatiques: nombres réels, etc.

Quels résultats mathématiques? I Théorie des nombres: critères de reconnaissances de grands nombres entiers, conjecture de Bertrand I Graphes: théorème des 4 couleurs I Géométrie: à partir des axiomes utilisés à l école I Ou bien à l aide d outils algébriques I Calcul de fonctions mathématiques: racine carrée, trigonométrie I Topologie

Quelles difficultés? I Changement de point vue très rapide dans l esprit humain I Très difficile avec l ordinateur I Effort de rigueur parfois limitant dans la création scientifique I Rigueur parfois recherchée I Faible quantité de résultats présents dans les bibliothèques

Quelles perspectives? I Plus de mathématiques pour dire plus de choses pertinentes sur le logiciel I Plus de logiciel mathématique pour faire plus de mathématiques I Vérifier formellement de nouvelles catégories de logiciel I Aborder de nouveaux domaines des mathématiques