λ-calcul et typage Qu est-ce qu une fonction?



Documents pareils
Algorithmique et Programmation Fonctionnelle

Recherche dans un tableau

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

Classes et Objets en Ocaml.

Algorithmique et Programmation, IMA

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

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

Présentation du langage et premières fonctions

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

STAGE IREM 0- Premiers pas en Python

Lambda-calcul et langages fonctionnels

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)

TP 1. Prise en main du langage Python

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

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

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

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

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

Logiciel Libre Cours 3 Fondements: Génie Logiciel

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

FONCTIONS DE PLUSIEURS VARIABLES (Outils Mathématiques 4)

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP


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

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

Cours de Programmation 2

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

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.

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Programmation en Caml pour Débutants

Principes des langages de programmation INF 321. Eric Goubault

Introduction à l étude des Corps Finis

Image d un intervalle par une fonction continue

Chapitre VI- La validation de la composition.

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

Simulation de variables aléatoires

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

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

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

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

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

Groupe symétrique. Chapitre II. 1 Définitions et généralités

Les structures de données. Rajae El Ouazzani

3. Conditionnement P (B)

modules & compilation

UML et les Bases de Données

Maple: premiers calculs et premières applications

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

MPI Activité.10 : Logique binaire Portes logiques

Algorithme. Table des matières

Continuité et dérivabilité d une fonction

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

Cours d Algorithmique et de Langage C v 3.0

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

Conventions d écriture et outils de mise au point

Théorie des Langages

Exercices - Fonctions de plusieurs variables : corrigé. Pour commencer

Logique : ENSIIE 1A - contrôle final

Initiation à la Programmation en Logique avec SISCtus Prolog

Rappels et compléments, première partie : Nombres complexes et applications à la géométrie

Représentation d un entier en base b

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

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

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

Objets et Programmation. origine des langages orientés-objet

OCL - Object Constraint Language

Exo7. Matrice d une application linéaire. Corrections d Arnaud Bodin.

Logiciel Libre Cours 2 Fondements: Programmation

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Arbres binaires de recherche

1 Complément sur la projection du nuage des individus

DOCM Solutions officielles = n 2 10.

chapitre 4 Nombres de Catalan

Logique. Plan du chapitre

Peut-on tout programmer?

Chapitre 2. Matrices

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

Cours d Analyse. Fonctions de plusieurs variables

Corrigé des TD 1 à 5

Représentation géométrique d un nombre complexe

Qu est-ce qu une probabilité?

Géométrie dans l espace Produit scalaire et équations

Génie Logiciel avec Ada. 4 février 2013

1 Recherche en table par balayage

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

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

2 Comment fonctionne un ordinateur, dans les grandes lignes

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Théorie de la Programmation

Limites finies en un point

Programmation. fonctionnelle, impérative, logique et orientée objet

Cours 1 : La compilation

Cours de mathématiques

Algorithmique et programmation : les bases (VBA) Corrigé

Probabilités sur un univers fini

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

Fonctions de deux variables. Mai 2011

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

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

Transcription:

λ-calcul et typage Nicolas Barnier, Pascal Brisset ENAC Avril 2009 Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 1 / 1 Qu est-ce qu une fonction? Classiquement Pas de notation uniforme/standard en mathématiques classiques : f, f (x), f x, Sauf : x, y sin x + cos x Confusion classique : f vs f (x) Pas de calcul possible! 1 0 f (x)dx, 10 i=1 x i... λ-calcul (A. Church - 1930 s) Langage permettant d écrire des expressions fonctionnelles (ou non) et muni d un calcul Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 2 / 1

Langage Les termes (ou expressions) du λ-calcul s écrivent avec λ,., (, ) et des variables ( V = x, y, z...). Nous les écrirons ici en utilisant la syntaxe du langage ML. Définition L ensemble Λ des termes du λ-calcul (pur, i.e. sans type) est le plus petit ensemble vérifiant les propriétés suivantes : variable V Λ (toute variable est un λ-terme) ; abstraction x V, A Λ alors (fun x A) Λ (Church : λ.x a ) ; application A, B Λ alors (A B) Λ ( A appliqué à B ) L opération d application est prioritaire sur l abstraction. Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 3 / 1 Curryfication Exemples : x, x y, fun x x, (f x) y, fun x x x,... Intuitivement, fun x Y est la fonction qui à x (paramètre) associe Y ( corps de la fonction) ; F A est l application de F (fonction) à A (argument). On n a besoin que de fonctions à un argument. Comparer f : (x, y) x y f : x (y x y) } {{ } f x Donc f (2, 3) = f 2 (3) = 6. Notations : Les parenthèses à gauche sont inutiles, ((A B) C) est identique à (A B C) Un seul fun pour des abstractions successives, fun x y z A pour fun x fun y fun z A Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 4 / 1

Occurrences libres et liées Les occurrences d une variable x dans un terme A sont les endroits où x apparaît dans A, excepté en position de paramètre. fun x y x (fun z (x y) z) Structure arborescente d un λ-terme : une occurrence est notée par le chemin depuis la racine : λ x λ y G et λ x λ y Dλ z GG On dit qu une occurrence de x est libre si λ x n apparaît pas dans le chemin : p.ex. dans fun z (x y) z. On dit qu elle est liée sinon. λ x λ y ( ) λ z x ( ) ( ) z x y Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 5 / 1 Combinateur Définition : un combinateur est un λ-terme sans variable libre. Quelques fameux : I = fun x x T = K = fun x y x F = fun x y y S = fun x y z (x z) (y z) = fun x x x Ω = Y = fun f (fun u f (u u)) (fun u f (u u)) IF = fun x y z x y z Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 6 / 1

Notation de de Bruijn L occurrence d une variable est notée par un entier qui est la profondeur relative de l abstraction de cette variable. Exemple : fun x fun y x (fun z (x y) z) est noté fun fun 2 (fun (3 2) 1) De même fun x fun x x fun fun 1 fun x y (fun x y) x fun fun (fun 2) 2 Remarques Pas besoin de nommer les variables, mais... Pas de notation pour les variables libres Peu intuitif (illisible!) Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 7 / 1 Calcul : α-équivalence Intuitivement, x cos x et y cos y désignent la même fonction. Ou encore, (fun x x) et (fun y y) sont les même λ-termes. Les noms n importent pas. Définition Deux termes sont α-équivalents (= α ) s ils ont la même représentation de de Bruijn. fun x x (fun y z z y) fun z z (fun x z z x) Propriété : l α-équivalence est une relation d équivalence. Dorénavant, on écrira = pour = α. Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 8 / 1

Définition Calcul : Substitution Soient A et B deux λ-termes, x une variable. On note A[x B] le terme A où toutes les occurrences libres de x ont été remplacées par B. Algorithme : (fun y x (fun z x y z))[x B] = (fun y x (fun z x y z))[z B] = (fun y x)[x y] = x[x X ] = X y[x X ] = y (A B)[x X ] = (A[x X ] B[x X ]) (fun x A)[x X ] = fun x A (fun y A)[x X ] = fun y A[x X ] Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 9 / 1 Calcul : β-réduction & β-équivalence Intuition : application d une fonction à un argument, i.e. la règle de calcul fondamentale. Définition β-réduction ( β ) (fun x A) B β A [x B] où A = α A et A ne contient pas de variables libres de B. Un terme de la forme (fun x A) B est appelé radical ou redex. On étend β à la structure des λ-termes : si M β M alors (fun x M) β (fun x M ) (M N) β (M N) (N M) β (N M ) Par clôture symétrique, réflexive et transitive de β, on engendre la relation d équivalence = β. Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 10 / 1

β-équivalence On a A = β B s il existe A 0,..., A n (avec n 0) tel que A 0 = A et A n = B (éventuellement n = 0, c est-à-dire A = B) ; i, 0 i n 1, A i β A i+1 ou A i+1 β A i. Exemples : (fun x x) (fun y y) (fun x x x) (fun y y) fun y ((fun x y x) y) (fun x y x (y x)) (fun u u u) (fun v w v) (fun u u u) (fun v v v) β β β β β Dorénavant, on écrira = pour = αβ. Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 11 / 1 η-équivalence Définition : Extensionnalité Deux fonctions f et g sont égales ssi pour tout x, on a f x = g x. Exemple : x x + x et x 2x sont extensionnellement égales (mais n ont pas le même procédé/algorithme de calcul). Pour les λ-termes : A =ext B si X, (A X ) = (B X ). Considérons A et (fun x A x) où x n est pas libre dans A. Pour tout X, on a (fun x A x) X = β (A X ) donc A =ext (fun x A x). Définition : η-équivalence Pour tout A, (fun x A x) η A si x n est pas libre dans A. On note = η la relation d équivalence associée. En OCaml : let f = fun x -> g x ; ; let f = g ; ; Dorénavant, on écrira = pour = αβη. Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 12 / 1

Forme normale Définition On dit qu un terme est sous forme normale s il ne contient pas de radical. On dit qu un terme M est normalisable s il existe un terme N sous forme normale tel que M = αβη N. Exemple : (fun u u u) (fun v v v) n est pas normalisable. Définition Soient une relation binaire, sa clôture transitive. est confluente ssi x, x 1, x 2 tels que x x 1 et x x 2 implique x tel que x 1 x et x 2 x Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 13 / 1 Forme normale (cont) Propriété Soient une relation binaire, sa clôture transitive, la relation d équivalence associée. Si est confluente, alors x y si et seulement si z tel que x z et y z Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 14 / 1

Théorème de Church-Rosser Théorème de Church-Rosser La β-réduction β est confluente. Corollaire : Pour tout A, si A est normalisable alors il existe A sous forme normale unique tel que A β A. Conséquence : La stratégie de réduction a peu d importance : si on obtient une forme normale, c est la bonne. Attention : (fun x y x) I Ω β??? Théorème : la stratégie de réduction gauche est normalisante : si un terme est normalisable, on peut obtenir sa forme normale en réduisant itérativement le radical le plus à gauche. Remarque : c est la stratégie d un langage fonctionnel paresseux (p.ex. Haskell). Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 15 / 1 Programmer en λ-calcul Booléens : True = T = fun x y x False = F = fun x y y Conditionnelle : If Then Else = IF = fun p y z p y z Couples : Entiers : Couple = C = fun x y z z x y Fst = fun x x T Snd = fun x x F 0 = I = fun x x Succ = C F Pred = fun x x F (Rq. Pred 0 = F) Eq zero = Z = fun x x T Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 16 / 1

λ-calcul typé Définition Soit A = {int, bool,...} ensemble de symboles ; T l ensemble des types est défini par A T : tout élément de A est un type (atomique) ; pour tout α, β T, α β est un type. Intuition : un type est un domaine ; α β est le domaine des fonctions de α dans β. Notation : est associative à droite. α 1 (α 2 (... (α n β)... )) = α 1 α 2 β Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 17 / 1 Typage Le typage consiste à associer un type à un λ-terme. On va écrire des jugements : Γ t t est typé dans le contexte Γ. Un contexte est un ensemble de paires variable-type (x : τ) On écrira x : τ si le contexte est vide. Système de règles Γ A : α β Γ B : α App Γ (A B) : β Γ, x : α A : β Γ (fun x A) : α β Abs Var, si (x : α) Γ Γ x : α Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 18 / 1

Exemple : A = {i, b}, fun x x (fun y y) : ((b b) i) i {x :..., y : b} y : b Var {x : ((b b) i)} x : ((b b) i) Var {x :...} (fun y y) : b b Abs On peut aussi inférer un type : {x : ((b b) i)} (x (fun y y)) : i App (fun x x (fun y y)) : ((b b) i) i Abs x : α, y : α x : β α=β x : α fun y x : β β=α β fun x fun y x : τ τ=α β On conclut : τ = α β = β (α β ). D où : fun x y x : int (bool int) ou fun x y x : bool (bool bool) Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 19 / 1 Propriétés La β-réduction conserve le typage ((fun x }{{} α }{{} A β } {{ } α β ) B }{{} α ) β A[ x B } {{ } ] même type pour x et B Prop. : Toute β-réduction d un λ-terme typé termine. Cor. : Tout λ-terme typé possède une forme normale. Cor. : Tout λ-terme non normalisable n est pas typable (la réciproque est fausse : fun x (x x)). Un aperçu du paysage normalisable... ML λ-calcul typé + définitions récursives Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 20 / 1

Le système Ocaml Le langage est fortement typé : pas de coercion (casting). Le système infère les types : l utilisateur n écrit pas les types de ses expressions. #1729;; - : int = 1729 #(+);; - : int -> int -> int = <fun> #let succ = fun x -> x + 1;; val succ : int -> int = <fun> #1 + 1.5;; Characters 4-7: 1 + 1.5;; ^^^ This expression has type float but is here used with type int Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 21 / 1 Le typage est polymorphe : l inférence est la plus générale possible. #fun x -> x;; - : a -> a = <fun> #fun f g x -> f (g x);; - : ( a -> b) -> ( c -> a) -> c -> b = <fun> #(=);; - : a -> a -> bool = <fun> Le let permet de généraliser #let id = fun x -> x in (id 1, id 2.0);; - : int * float = (1, 2.) #(fun id -> (id 1, id 2.0)) (fun x -> x);; Characters 21-24: (fun id -> (id 1, id 2.0)) (fun x -> x);; ^^^ This expression has type float but is here used with type int Nicolas Barnier, Pascal Brisset (ENAC) λ-calcul et typage Avril 2009 22 / 1