SlideShare une entreprise Scribd logo
1  sur  103
Télécharger pour lire hors ligne
#DevoxxFR
@yassine_meherzi
Tous les hommes doivent être rasés
Tous les hommes doivent être rasés
Le barbier doit raser tous les hommes qui ne se rasent pas eux-mêmes et seulement ceux-ci
Tous les hommes doivent être rasés
Le barbier doit raser tous les hommes qui ne se rasent pas eux-mêmes et seulement ceux-ci
??
Mon nez va
grandir !
David Hilbert
1862 – 1943
Problème de l’arrêt (Halting problem)
David Hilbert
1862 – 1943
Problème de l’arrêt (Halting problem)
La réponse est NON David Hilbert
1862 – 1943
Machine de Turing
(1936)
Machine de Turing
(1936)
Lambda-Calcul
(1935-1936)
Machine de Turing
Etat
Lambda-Calcul
Tout est fonction ≠
Machine de Turing
Etat
Lambda-Calcul
Tout est fonction
Thèse
Church-Turing
Machine de Turing
Etat
Lambda-Calcul
Tout est fonction
@yassine_meherzi
Yassine Meherzi
Technical Leader
λ x.e
Syntaxe
λ-Abstraction
λ x.e
Début de la fonction
Syntaxe
λ x.e
Variable
Début de la fonction
Syntaxe
λ x.e
Variable
Fin des arguments
Début de la fonction
Syntaxe
λ x.e
Variable
Fin des arguments
Expression
Début de la fonction
Syntaxe
e ::= variable (x, y, z…) Identifiant
Syntaxe
e ::= variable (x, y, z…)
| λ variable . e’
Identifiant
Abstraction
Syntaxe
e ::= variable (x, y, z…)
| λ variable . e’
| e1 e2
Syntaxe
Identifiant
Abstraction
Application
e ::= variable (x, y, z…)
| λ variable . e’
| e1 e2
| ( e’ )
Syntaxe
Identifiant
Abstraction
Application
Groupement
λ x.x
Identité
Application (x = 5)
Application
(λ x.x) 5
Application (x = 5)
Application
(λ x.x) 5
(λ x.x) 5
β-réduction
Application (x = 5)
Application
(λ x.x) 5
(λ x.x) 5
5
β-réduction
(λ x.x+1) 2
Application (x = 2)
Application
(λ x.x+1) 2
Application (x = 2)
Application
(λ x.x+1) 2
2+1
Application (x = 2)
Application
Redex
expression réductible
(λ x.x+1) 2
2+1
3
Application (x = 2)
Application
Redex
expression réductible
Ordre d’application
f a
Sens de réduction
Ordre d’application
f g a
Sens de réduction
Ordre d’application
(f g) a
Sens de réduction
(λ x.x+2 λ y.y) 5
Ordre d’application
f g
(λ x.x+2 λ y.y) 5
(λ y.y+2) 5
Ordre d’application
f g
(λ x.x+2 λ y.y) 5
(λ y.y+2) 5
(λ y.y+2) 5
5+2
7
Ordre d’application
f g
(λ x. x+x) (3 + 4)
Application (x = 3 + 4)
Stratégies d’évaluation
f a
(λ x. x+x) (3 + 4)
(3 + 4) + (3 + 4)
7 + 7
14
Application (x = 3 + 4)
Stratégies d’évaluation
Ordre normal
(λ x. x+x) (3 + 4)
(3 + 4) + (3 + 4)
7 + 7
14
Application (x = 3 + 4)
(λ x. x+x) (3 + 4)
(λ x. x+x) 7
7 + 7
14
Ordre normal Ordre applicatif
Stratégies d’évaluation
(λ x. x+x) (3 + 4)
(3 + 4) + (3 + 4)
7 + 7
14
Application (x = 3 + 4)
(λ x. x+x) (3 + 4)
(λ x. x+x) 7
7 + 7
14
Ordre normal
Appel par nom
Ordre applicatif
Appel par valeur
Stratégies d’évaluation
(λ x. 2) (3 + 4)
Application (x = 3 + 4)
Stratégies d’évaluation
f a
(λ x. 2) (3 + 4)
2
Application (x = 3 + 4)
Stratégies d’évaluation
(λ x. 2) (3 + 4)
2
Application (x = 3 + 4)
(λ x. 2) (3 + 4)
(λ x. 2) 7
2
Stratégies d’évaluation
(λ x. 2) (3 + 4)
2
Application (x = 3 + 4)
(λ x. 2) (3 + 4)
(λ x. 2) 7
2
Stratégies d’évaluation
Evaluation retardée Evaluation immédiate
Ordre normal
Appel par nom
Evaluation retardée
Ordre applicatif
Appel par valeur
Evaluation immédiate
Church-Rosser
Stratégies d’évaluation
Ordre normal
Appel par nom
Evaluation retardée
Ordre applicatif
Appel par valeur
Evaluation immédiate
Church-Rosser
Stratégies d’évaluation
Fonction anonyme
λ x.x+y
λ x.x+y
Fonction anonyme
x: variable liée
y: variable libre
Fonction anonyme
λ x.x+y
x: variable liée
y: variable libre
Fonction pure
Fonction pure
x
Fonction pure
x x + 1
Fonction pure
Fonction pure
e ::= variable (x, y, z…)
| λ variable . e’
| e1 e2
| ( e’ )
Syntaxe
Identifiant
Abstraction
Application
Groupement
e ::= variable (x, y, z…)
| λ variable . e’
| e1 e2
| ( e’ )
Syntaxe
Identifiant
Abstraction
Application
Groupement
λ x.x
Application (x = fonction)
Fonction d’ordre supérieur
Fonction d’ordre supérieur
(λ x.x) λ y.y+1
Application (x = λ y.y+1 )
Fonction d’ordre supérieur
(λ x.x) λ y.y+1
λ y.y+1
Application (x = λ y.y+1 )
Identité(f) = f
Fonction d’ordre supérieur
(x,y) => x+y ?
Fonction unaire
λxy. x+y
Fonction unaire
(λxy. x+y) => (λx. λy. x+y)
Fonction unaire
Curryfication
Fonction unaire
(λ x. λ y. x+y) 1 2
Application (x = 1) (y = 2)
Fonction unaire
(λ x. λ y. x+y) 1 2
(λ x. λ y. x+y) 1 2
Application (x = 1) (y = 2)
Fonction unaire
(λ x. λ y. x+y) 1 2
(λ x. λ y. x+y) 1 2
(λ y. 1+y) 2
Application (x = 1) (y = 2)
Application partielle
Fonction unaire
(λ x. λ y. x+y) 1 2
(λ x. λ y. x+y) 1 2
(λ y. 1+y) 2
1+2 = 3
Application (x = 1) (y = 2)
Application partielle
Fonction unaire
1936 λ-Calcul
1941 λ-Calcul simplement typé
1958 Lisp 2007 Clojure
1975 Scheme
1936 λ-Calcul
1941 λ-Calcul simplement typé
1972 λ-Calcul polymorphe
1936 λ-Calcul
1941 λ-Calcul simplement typé
1958 Lisp 2007 Clojure
1975 Scheme
1973 ML 1985 Miranda 1987 Caml
1984 SML
1936 λ-Calcul
1941 λ-Calcul simplement typé
1958 Lisp 2007 Clojure
1975 Scheme
1972 λ-Calcul polymorphe
1977 FP 1990 Haskell
1973 ML 1985 Miranda 1987 Caml
1984 SML
1936 λ-Calcul
1941 λ-Calcul simplement typé
1958 Lisp 2007 Clojure
1975 Scheme
1972 λ-Calcul polymorphe
2007 Clojure
1986 Erlang 2011 Elixir
1990 Haskell
1977 FP 1990 Haskell
1973 ML 1985 Miranda 1987 Caml
1984 SML
1936 λ-Calcul
1941 λ-Calcul simplement typé
1958 Lisp 2007 Clojure
1975 Scheme
1972 λ-Calcul polymorphe
2003 Scala
2002 F#
1996 OCaml
2007 Clojure
1986 Erlang 2011 Elixir
1990 Haskell
1977 FP 1990 Haskell
1973 ML 1985 Miranda 1987 Caml
1984 SML
1936 λ-Calcul
1941 λ-Calcul simplement typé
1958 Lisp 2007 Clojure
1975 Scheme
1972 λ-Calcul polymorphe
2003 Scala
2002 F# 2010 Rust
2007 Clojure
1986 Erlang 2011 Elixir
1990 Haskell
1977 FP 1990 Haskell
1973 ML 1985 Miranda 1987 Caml
1984 SML
1936 λ-Calcul
1941 λ-Calcul simplement typé
1958 Lisp 2007 Clojure
1975 Scheme
1972 λ-Calcul polymorphe
1996 OCaml
2012 Elm
2010 Rust
2012 Elm
1936 λ-Calcul
1941 λ-Calcul simplement typé
1958 Lisp 2007 Clojure
1990 Haskell
1975 Scheme
1972 λ-Calcul polymorphe
1973 ML
2003 Scala
2002 F#
1996 OCaml
1986 Erlang 2011 Elixir
1977 FP
1985 Miranda 1987 Caml
1984 SML
Conclusion
Conclusion
Conclusion
Aller plus loin …
#DevoxxFR
@yassine_meherzi
True = λ a. λb. a
False = λ a. λb. b
if = p ? e1 : e2
if = predicate x then-clause else-clause
If = λ p. λa. λb. p a b
Booléens
True
False
And
Or
Not1
Not2
Xor
If
Booléens
λa. λb. a
λa. λb. b
λp. λq. p q p
λp. λq. p p q
λp. λa. λb. p b a
λp. p(λa. λb.b) (λa. λb.a)
λa. λb. a (not b) b
λp. λa. λb. p a b
Y = λf. (λx. f(x x)) (λx. f(x x))
Récursivité

Contenu connexe

Similaire à Lambda calcul Devoxx 2021

Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelleMICHRAFY MUSTAFA
 
Les Fonctions de référence.pptx
Les Fonctions de référence.pptxLes Fonctions de référence.pptx
Les Fonctions de référence.pptxrezgui10
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelleGeeks Anonymes
 
traitement-du-signal-avance.pptx
traitement-du-signal-avance.pptxtraitement-du-signal-avance.pptx
traitement-du-signal-avance.pptxNouzhaBoukouba1
 

Similaire à Lambda calcul Devoxx 2021 (7)

ALF 9 - Generation de code
ALF 9 - Generation de codeALF 9 - Generation de code
ALF 9 - Generation de code
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
Les Fonctions de référence.pptx
Les Fonctions de référence.pptxLes Fonctions de référence.pptx
Les Fonctions de référence.pptx
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelle
 
traitement-du-signal-avance.pptx
traitement-du-signal-avance.pptxtraitement-du-signal-avance.pptx
traitement-du-signal-avance.pptx
 
cours algorithme
cours algorithmecours algorithme
cours algorithme
 
ALF 8 - Generation de code
ALF 8 - Generation de codeALF 8 - Generation de code
ALF 8 - Generation de code
 

Lambda calcul Devoxx 2021