Algorithmique et Programmation Fonctionnelle



Documents pareils
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)

Lambda-calcul et langages fonctionnels

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

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

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

Peut-on tout programmer?

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

Cours d Analyse. Fonctions de plusieurs variables

STAGE IREM 0- Premiers pas en Python

Informatique Machines à calculer en théorie et en pratique

Machines virtuelles Cours 1 : Introduction

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Algorithmique et Programmation, IMA

CORRIGE LES NOMBRES DECIMAUX RELATIFS. «Réfléchir avant d agir!»

DOCM Solutions officielles = n 2 10.


Algorithmique et structures de données I

Réalisabilité et extraction de programmes

1 Recherche en table par balayage

Logiciel de Base. I. Représentation des nombres

Master IMA - UMPC Paris 6 RDMM - Année Fiche de TP

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

Rappels sur les suites - Algorithme

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

Recherche dans un tableau

1 Définition et premières propriétés des congruences

Corrigé des TD 1 à 5

Suites numériques 3. 1 Convergence et limite d une suite

Université Paris-Dauphine DUMI2E 1ère année, Applications

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

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Résolution de systèmes linéaires par des méthodes directes

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

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

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

Structures algébriques

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

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

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

Chapitre 2. Matrices

Algorithme. Table des matières

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

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

Initiation à l algorithmique

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

Programmation linéaire

Cours 1 : La compilation

La fonction exponentielle

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

IFT2880 Organisation des ordinateurs et systèmes

3. Conditionnement P (B)

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

Évaluation et implémentation des langages

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Algorithmes de recherche

Intégration et probabilités TD1 Espaces mesurés Corrigé

Présentation du langage et premières fonctions

Image d un intervalle par une fonction continue

Introduction à la théorie des files d'attente. Claude Chaudet

Représentation d un entier en base b

Chapitre 3. Mesures stationnaires. et théorèmes de convergence

Cours d Informatique

Cours 02 : Problème général de la programmation linéaire

Programmes des classes préparatoires aux Grandes Ecoles

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

Moments des variables aléatoires réelles

Exercices - Polynômes : corrigé. Opérations sur les polynômes

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

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

Chp. 4. Minimisation d une fonction d une variable

Intégration et probabilités TD1 Espaces mesurés

Logique. Plan du chapitre

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

Informatique Générale

FIMA, 7 juillet 2005

Théorie des Graphes Cours 3: Forêts et Arbres II / Modélisation

1ère partie Nadine Cullot. Bases de données déductives. Bases de données déductives Introduction et Motivation

Développement décimal d un réel

3 ème 2 DÉVELOPPEMENT FACTORISATIONS ET IDENTITÉS REMARQUABLES 1/5 1 - Développements

UE C avancé cours 1: introduction et révisions

Cours de mathématiques

Modèles de Calcul. Yassine Lakhnech. 2007/08 Université Joseph Fourier Lab.: VERIMAG. Modèles de Calcul Start p.

MPI Activité.10 : Logique binaire Portes logiques

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

CHAPITRE VIII : Les circuits avec résistances ohmiques

UE Programmation Impérative Licence 2ème Année

Master CCI. Compétences Complémentaires en Informatique. Livret de l étudiant

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Logique : ENSIIE 1A - contrôle final

3. Caractéristiques et fonctions d une v.a.

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

V- Manipulations de nombres en binaire

1 radian. De même, la longueur d un arc de cercle de rayon R et dont l angle au centre a pour mesure α radians est α R. R AB =R.

Résolution d équations non linéaires

Pour l épreuve d algèbre, les calculatrices sont interdites.

FONCTIONS DE PLUSIEURS VARIABLES (Outils Mathématiques 4)

Algorithmes récursifs

Fondements de l informatique Logique, modèles, et calculs

Transcription:

Algorithmique et Programmation Fonctionnelle RICM3 Cours 9 : Lambda-calcul Benjamin Wack Polytech 2014-2015 1 / 35

La dernière fois Typage Polymorphisme Inférence de type 2 / 35

Plan Contexte λ-termes Évaluation Modélisation Récursivité Propriétés du λ-calcul 3 / 35

Contexte Qu est-ce qu un langage de programmation? Un langage commun entre l homme et la machinela machine = Assembleur Un langage commun entre l homme et un modèle de la machine Variables = mémoire accès par références et pas par adresses Conditionnelle = branchement enchaînement d un calcul et d une action Boucle = manipulation du registre PC cycle dans la table d action... 5 / 35

Contexte À quel machine correspond un langage fonctionnel? Aucune! Au modèle fonctionnel : le λ-calcul proposé par Alonzo Church en 1936 pour modéliser ce qu est une fonction calculable (i.e. par une machine) Les deux modèles ont été montrés équivalents en 1937 par Turing. 6 / 35

λ-termes Syntaxe Notations x, y, z... sont des variables A, B, C...M, N sont des termes Termes Un terme peut être : une variable x une abstraction λx.a où A est un terme et x une variable (équivaut à fun x -> A) une application A B où A et B sont deux termes et c est tout! 8 / 35

λ-termes Conventions Application prioritaire λx.x y = λx.(x y) et pas (λx.x) y Application associative à gauche (AB 1 B 2... B k ) = (... ((AB 1 )B 2 )... B k ) Abréviation des abstractions (λx 1.λx 2.... λx k.a) = (λx 1.(λx 2.... (λx k.a)...) = (λx 1 x 2... x k.a) Quizz A B C = ((A B) C) f (λx.x) y = (f (λx.x)) y λx.(λy.y z) x = λx.((λy.(y z)) x) 9 / 35

λ-termes Notion de variable liée Quelle différence y a-t-il entre fun x -> x et fun y -> y? Aucune, ce qui importe n est pas le nom de la variable mais les endroits où elle est présente. Situations similaires omniprésentes en informatique et en mathématiques : x.p(x) for (int i=0 ; i<n ; i++) {... } b a f (x)dx On parle de variable liée, ou aussi variable muette. 10 / 35

λ-termes α-conversion Peut-on vraiment choisir un nom arbitraire pour une variable liée? λx.x y λy.y y (capture) α-conversion = renommer une variable liée sans utiliser une variable déjà présente dans le terme Exemple : λx.xy = α λz.zy 11 / 35

λ-termes Substitution On note A[x := B] pour «remplacer les occurrences de x par B dans A». Précautions : (λx.y)[x := A] = λa.y?? λa.y n est pas valide DONC ne pas remplacer après un λ. (λx.x)[x := y] = λx.y?? x est liée au λ DONC ne pas la remplacer. (λx.y)[y := x] = λx.x?? y n est pas liée mais le devient DONC renommer avant Bref : toujours effectuer une α-conversion avant de substituer. 12 / 35

λ-termes Substitution On note A[x := B] pour «remplacer les occurrences de x par B dans A». Précautions : (λz.y)[x := A] = λz.y λa.y n est pas valide DONC ne pas remplacer après un λ. (λz.z)[x := y] = λz.z x est liée au λ DONC ne pas la remplacer. (λz.y)[y := x] = λz.x y n est pas liée mais le devient DONC renommer avant Bref : toujours effectuer une α-conversion avant de substituer. 12 / 35

Évaluation β-réduction Les λ-termes sont des expressions qui ont donc vocation à être évaluées. Une règle locale (λx.a) B β A[x := B] peut être appliquée partout dans le terme, répétée... Exemples : (λx.x) B β B (λx.x y) λz.z β (λz.z) y β y (fun x -> x ) 6 ;; - : int = 6 14 / 35

Évaluation Notations pour β la clôture réflexive transitive : A B ssi n 0, A 0,..., A n, A = A 0 A 1... A n = B passe au contexte : si A B alors AC BC et CA CB si A B alors λx.a λx.b 15 / 35

Évaluation Exercices (λx.xx)(λy.y) β (λy.y)(λy.y) β λy.y (λx.(λy.xy))y = α (λx.(λz.xz))y β λz.yz 16 / 35

Modélisation Expressivité Que peut-on calculer avec ça? Tout! (thèse de Church-Turing) En particulier tout ce qui constitue les algorithmes Structures de contrôle Conditionnelle Boucles? 18 / 35

Modélisation Expressivité * Données Booléens Entiers n-uplets Et bien sûr, fonctions 19 / 35

Modélisation Booléens vrai = λxy.x faux = λxy.y 20 / 35

Modélisation Conditionnelle ifthenelse = λbuv.buv Vérifions ifthenelse vrai A B A ifthenelse vrai A B = (λbuv.buv) vrai A B (λuv.vrai uv) A B (vrai A B) = (λxy.x)a B Exercice : ifthenelse faux A B B A 21 / 35

Modélisation Exercice : définir les connecteurs logiques non non = λb.ifthenelse b faux vrai λb.b faux vrai et et = λab.ifthenelse a b faux λab.a b faux ou ou = λab.ifthenelse a vrai b λab.a vrai b 22 / 35

Modélisation Couples Le couple (A, B) est représenté par λz.zab Projections π 1 = λs.s vrai Vérifier que π 1 λz.zab A Vérifier que π 2 λz.zab B π 2 = λs.s faux 23 / 35

Modélisation Entiers de Church 0 = λfx.x 1 = λfx.fx 2 = λfx.f (fx) et d une manière générale : n = λfx.f (f (...(fx)...)) = λfx.f n x avec f itérée n fois. Exemple : itération itere = λnuv.nuv v est le cas de base et u une fonction. Si n est nul, on calcule v, sinon on calcule u n (v). 24 / 35

Modélisation En TD Successeur 1. soit en ajoutant un f en tête, 2. soit en queue. addition multiplication exponentielle test à zéro 25 / 35

Récursivité Une première boucle Soit ω = λx.xx et Ω = ωω = (λx.xx)(λx.xx) (λx.xx)(λx.xx) β (λx.xx)(λx.xx) Donc Ω β Ω β... Propriété La β-réduction ne termine pas en général. 27 / 35

Récursivité Notion de point fixe Théorème Tout λ-terme F a un point fixe x, x = β Fx Définition Un λ-terme Y tel que pour tout F, YF soit un point fixe de F est un combinateur de point fixe. Combinateur Y de Church (YF = β F (YF ) ) Combinateur Θ de Turing (ΘF F (ΘF ) ) 28 / 35

Récursivité Point fixe de Church Y Comment trouver Y tel que YF = β F (YF )? Indice : partir de (λx.xx)(λx.xx) Y = λf.(λx.f (xx))(λx.f (xx)) 29 / 35

Récursivité Point fixe de Turing Θ Comment trouver Θ tel que ΘF F (ΘF ) Θ = (λg.λh.h(ggh))(λg.λh.h(ggh)) 30 / 35

Algorithmique et Programmation Fonctionnelle Propriétés du λ-calcul Church-Rosser Confluence Soient t, u 1 et u 2 des λ-termes tels que t u 1 et t u 2. Alors il existe un λ-terme v tel que u 1 v et u 2 v. t u 1 u 2 Preuve difficile. v 32 / 35

Propriétés du λ-calcul Terminaison Normalisation faible Tout terme admet une suite finie de β-réductions à la suite desquelles il n est plus réductible. Normalisation forte Aucun terme n admet de suite infinie de β-réductions. À condition de rajouter un système de types. 33 / 35

Propriétés du λ-calcul Corollaire Unicité de la forme normale Si la réduction d un terme donne un terme en forme normal alors ce terme est unique. Preuve Supposons que t se β-réduise en u et v deux termes normaux distincts. En appliquant le théorème, il exite w tel que u w et v w. Or comme u et v sont normaux nous obtenons u = w et v = w. 34 / 35

Propriétés du λ-calcul Conclusion Aujourd hui Lambda-calcul Expressivité Un autre apport d un système de types Prochaine fois Traits impératifs Compléments 35 / 35