Algorithmique et Programmation Fonctionnelle (APF)

Documents pareils
Classes et Objets en Ocaml.

Plan du cours : Zippers. Des fonctions sur les listes avec position. Des fonctions sur les listes avec position

Recherche dans un tableau

# 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>

Cours de Programmation 2

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

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

Chapitre VI- La validation de la composition.

Les arbres binaires de recherche

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

Algorithmique et Programmation, IMA

Algorithmique et Programmation Fonctionnelle

Chapitre 2. Eléments pour comprendre un énoncé

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

Cours 1 : La compilation

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Arbres binaires de recherche

Les structures de données. Rajae El Ouazzani

Conventions d écriture et outils de mise au point

Logiciel Libre Cours 3 Fondements: Génie Logiciel

TP3 : Manipulation et implantation de systèmes de fichiers 1

Plus courts chemins, programmation dynamique

L exclusion mutuelle distribuée

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Informatique Générale

Vérification formelle de la plate-forme Java Card

Présentation du langage et premières fonctions

Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

MIS 102 Initiation à l Informatique


Représentation d un entier en base b

Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" ;; let appliquer = List.map ;; (* affichage d'un noeud *)

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

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

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

modules & compilation

Objectifs du cours d aujourd hui. Informatique II : Cours d introduction à l informatique et à la programmation objet. Complexité d un problème (2)

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

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

Cours d Algorithmique et de Langage C v 3.0

Sélection du contrôleur

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

Initiation à l algorithmique

Introduction à JDBC. Accès aux bases de données en Java

Organigramme / Algorigramme Dossier élève 1 SI

3. Conditionnement P (B)

CH.6 Propriétés des langages non contextuels

Algorithme. Table des matières

Algorithmique et programmation : les bases (VBA) Corrigé

Introduction à la théorie des graphes. Solutions des exercices

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

TP 1. Prise en main du langage Python

INTRODUCTION A L ELECTRONIQUE NUMERIQUE ECHANTILLONNAGE ET QUANTIFICATION I. ARCHITECTURE DE L ELECRONIQUE NUMERIQUE

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

Resolution limit in community detection

STAGE IREM 0- Premiers pas en Python

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

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

F. Barthélemy. 17 mai 2005

Programme Compte bancaire (code)

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

Objets Combinatoires élementaires

Programmation Web. Madalina Croitoru IUT Montpellier

Bases de programmation. Cours 5. Structurer les données

Mémo d utilisation de ADE-4

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

Conception des systèmes répartis

Introduction à MATLAB R

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

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

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Limites finies en un point

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Cours d initiation à la programmation en C++ Johann Cuenin

Introduction à la programmation concurrente

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

Chapitre 10 Arithmétique réelle

Traitement bas-niveau

Logiciel de Base. I. Représentation des nombres

V- Manipulations de nombres en binaire

Théorie et Codage de l Information (IF01) exercices Paul Honeine Université de technologie de Troyes France

Exercices sur les équations du premier degré

TP : Gestion d une image au format PGM

Hervé Couturier EVP, SAP Technology Development

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

TP1 : Initiation à Java et Eclipse

Détail des cultures de l'exploitation en 2007

Problème : Calcul d'échéanciers de prêt bancaire (15 pt)

Baccalauréat ES Pondichéry 7 avril 2014 Corrigé

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

Systèmes décisionnels et programmation avancée

1 Recherche en table par balayage

Transcription:

Algorithmique et Programmation Fonctionnelle (APF) RICM3 Cours 3 : filtrage avancé, preuves par récurrence structurelle Jean-François Monin, Benjamin Wack 2015-2016 1 / 38

Plan Un peu de théorie Sommes et filtrage Sommes récursives La récurrence en informatique Retour sur les listes 2 / 38

Un peu de théorie Un peu de théorie Quelques connexions entre informatique et logique 3 / 38

Un peu de théorie Structuration des données : sommes et produits Deux formes essentielles de structuration de données Juxtaposition : un truc avec un machin couples, n-uplets, records, tableaux, produit cartésien Disponibles (primitifs) dans tous les langages de programmation Choix : un truc ou un machin grand oublié des langages usuels en tant que structure de composition bit (chiffre binaire ; booléen) entiers, données atomiques énumération pointeur vide ou alloué (*) Réhabilité (primitif) dans les langages fonctionnels typés comme OCaml 4 / 38

Un peu de théorie Structuration des données : sommes et produits Connexion profonde avec la logique (*) Juxtaposition conjonction Une preuve de A B est obtenue à partir d une preuve de A juxtaposée avec une preuve de B Choix disjonction Une preuve de A B est obtenue à partir d une preuve de A ou d une preuve de B En pratique Aide à la conception et au raisonnement 5 / 38

Un peu de théorie Structuration des données : questions essentielles Comment construire Comment utiliser Comment calculer 6 / 38

Un peu de théorie Structuration des données : questions essentielles Comment construire un couple, un n-uplet, etc. une somme : constructeurs une fonction fun... ->... En logique (*) : principe d introduction 7 / 38

Un peu de théorie Structuration des données : questions essentielles Comment utiliser (décomposer, analyser) un couple, un n-uplet, etc. : projection récupération du premier, second,... composant une somme : filtrage match une fonction : application à un argument En logique (*) : principe d élimination 8 / 38

Un peu de théorie Structuration des données : questions essentielles Comment calculer (réduire) Confrontation d une construction et d une décomposition projection à partir un couple, un n-uplet, etc. filtrage d une valeur dans un type somme fonctions : substitution des paramètres effectifs aux paramètres formels En logique (***) : simplification par élimination des coupures 9 / 38

Un peu de théorie Sommes généralisées Un cas peut embarquer plusieurs composants On a donc une somme de produits 10 / 38

Sommes et filtrage Sommes et filtrage 11 / 38

Sommes et filtrage Exemples de type somme type legume = Haricot Carotte Courge type fleur = Rose Hortensia type fruit = Poire Banane type couleur = Rouge Jaune Blanc type plante = Legume of legume Fleur of fleur * couleur Fruitier of fruit type objet = Plante of plante... Représentation graphique (au tableau) Arbres 12 / 38

Sommes et filtrage Type somme et filtrage Un type définit exhaustivement les valeurs possibles après réduction Le filtrage couvre toutes ces valeurs par des motifs Motif Arbre à trous, où chaque trou représente un sous-arbre quelconque (du type approprié) match o with Plante (Fleur (f, c)) ->... f... c...... Représentation graphique Motif de filtrage arborescent 13 / 38

Sommes et filtrage Recette pour faire des motifs Le bon, la brute et le truand L humanité est divisée en deux catégories : il y a ceux qui tiennent un pistolet chargé et il y a ceux qui creusent. Toi, tu creuses Recette Prendre un arbre Creuser Nommer les trous : x, y, n, l... (ou les laisser anonymes : _) 14 / 38

Sommes et filtrage Avantage du filtrage sur le if Assurance gratuite que l on baigne dans le bon environnement Voir plus loin 15 / 38

Sommes et filtrage Ce qu effectue le filtrage Reconnaissance de forme En cas de succès : nommage de sous-arbres (liaison de sous-arbres à des noms) Exhaustivité Toutes les valeurs possibles du type doivent être couvertes Rappel : une valeur est ce qu on obtient après calcul 16 / 38

Sommes et filtrage Match est ordonné let foo y = match y with [] ->... (* 1er test *) a :: e ->... (* 2eme test*) [a] ->... (* jamais atteint*);; En OCaml les motifs sont évalués de haut en bas 17 / 38

Sommes et filtrage Motifs du match Un motif ne peut contenir que des constructeurs constructeurs de somme couple, triplet... listes : :: et [] Un motif doit être linéaire : pas de Constr(... x... x...) Pas d opération nécessitant un calcul pas d appel de fonction, y compris +, &&, @ pas de if, de let, de match,... 18 / 38

Sommes et filtrage Motif universel (ou joker) Une variable x est un motif universel : capture tous les cas (non encore capturés par un motif précédent) L underscore _ est une variable qui s oublie (aucune liaison n est créée) Dans un motif l underscore _ est un motif universel qui ne crée pas de liaison (x, _) -> _ -> 19 / 38

Sommes et filtrage Match est exhaustif Sinon Warning et exception! Exemple # let foo p = match p with Legume(l) -> 1 ; ; Warning P : this pattern-matching is not exhaustive. Here is an example of a value that is not matched : Fruitier (Poire) val foo : plante -> int = <fun> # foo (Fruitier (Poire)) ; ; Exception : Match_failure ("", 1, 11). 20 / 38

Sommes et filtrage Match : partage de résultats pour plusieurs cas Exemple : moitié d un chiffre décimal match x with 0 2 4 6 8 -> x/2 1 3 5 7 9 -> (x+1)/2 _ -> 0 ;; 21 / 38

Sommes et filtrage Match : nommage d un sous-motif Exemple match a with N (N (g1, x1, d1) as gxd1, y, N (g2, x2, d2)) ->... gxd1... _ ->... 22 / 38

Sommes et filtrage Match conditionnel (when) Égalité # let eg x = match x with (a, b) when a = b true (a, b) false ;; 1. évaluation de la condition du when 2. si vrai, l expression associée est évaluée 3. sinon passage au cas suivant. eg (1, 1);; - : bool = true eg (1,3);; - : bool = false 23 / 38

Sommes et filtrage Match implicite : let filtrant I Somme à un cas type eb = EB of int bool match x with EB(n, b)... n... b... let EB(n, b) = x in... n... b... Attention à l inversion de l ordre 24 / 38

Sommes et filtrage Match implicite : let filtrant II Filtrage sur un couple match couple with (n, b)... n... b... let (n, b) = couple in... n... b... 25 / 38

Sommes récursives Sommes récursives 26 / 38

Sommes récursives Type somme récursif : listes type liste_ent = Nil Cons of int * liste_ent Exemple : [5 ; 2 ; 4 ] Cons (5, Cons (2, Cons (4, Nil))) Cons :: 5 Cons 5 :: 2 Cons 2 :: 4 Nil 4 [ ] 27 / 38

Sommes récursives Le type récursif arbre binaire Arbre binaire Un arbre binaire est : soit l arbre vide ; soit un nœud constitué d une étiquette et de 2 sous-arbres binaires (gauche et droit). On suit cette définition pour modéliser les arbres en OCaml : type arbre = FV N of arbre * int * arbre type a arbre = FV N of a arbre * a * a arbre 28 / 38

Sommes récursives Programmation par analyse de cas Canevas Chercher une solution pour chaque cas Dans chaque cas, on peut appliquer des fonctions auxiliaires sur ses composants 29 / 38

Sommes récursives Programmation par analyse de cas Exemples tester qu une liste est vide tester qu un arbre est vide queue et tête d une liste sous-arbres gauche ou droit 30 / 38

Sommes récursives Programmation par récursion structurelle Canevas Chercher une solution pour chaque cas Dans chaque cas, on peut appliquer des fonctions auxiliaires ou la fonction en cours de définition sur ses composants idée sous-jacente : supposons le résultat obtenu sur la queue de la liste considérée les sous-arbres gauche et droit de l arbre considéré etc. construisons le résultat de la liste (de l arbre) considéré(e) au moyen de ces résultats intermédiaires 31 / 38

Sommes récursives Programmation par récursion structurelle Exemples longueur d une liste concaténation de 2 listes liste des feuilles d un arbre taille d un arbre (nombre de feuilles, nombre de nœuds) 32 / 38

La récurrence en informatique Retour sur les listes Rappel : programmation par récursion structurelle Canevas Chercher une solution pour chaque cas. Dans chaque cas, on peut appliquer des fonctions auxiliaires ou la fonction en cours de définition sur ses composants. 34 / 38

La récurrence en informatique Retour sur les listes Exemple : récursion structurelle sur une liste Idée sous-jacente On donne le résultat sur la liste vide une liste x :: q en supposant connu le résultat sur la queue q On aura ainsi le résultat sur n importe quelle liste. 35 / 38

La récurrence en informatique Retour sur les listes Raisonner par récurrence structurelle C est pareil que programmer par récursion structurelle. 36 / 38

La récurrence en informatique Retour sur les listes Exemple : récurrence structurelle sur une liste Idée sous-jacente Si on peut démontrer une propriété sur la liste vide une liste x :: q en supposant la propriété démontrée sur la queue q On aura ainsi une preuve de la propriété sur n importe quelle liste. Récurrence sur les listes Soit P un prédicat sur les listes. } P([]) Si on peut en déduire que l, P(l). et x, q, P(q) P(x :: q) 37 / 38

La récurrence en informatique Retour sur les listes Prouver que le bégaiement double la longueur P(l) déf == long(begaie l) = 2 long l let rec begaie l = match l with [] [] x :: q x :: x :: (begaie q) let rec long l = match l with [] 0 x :: q 1 + (long q) Prouver : l P(l) long(begaie []) = long([]) = 0 = 2 0 = 2 long [] q x, hypothèse de récurrence : long(begaie q) = 2 long q long (begaie (x :: q)) = long (x :: x :: begaie q) = 1 + 1 + long (begaie q) = 1 + 1 + 2 long q (hyp rec) = 2 (1 + long q) = 2 (long (x :: q)) 38 / 38