1 TDs de λ-calcul 2 Grammaire 3 Règles de déparenthésage

publicité
1 TDs de λ-calcul
Je recommande en lecture parallèle du TD, le polycopié de cours sur le λ-calcul.
2 Grammaire
N ={S }
atomes
X ={ λ , ,}∪{variales

}∪{ constantes }
S→x
S → (S S)
S → (λxS)
x ∈ (atomes)
application
abstraction
x ∈ (variables)
variables : x,y,z,a,b,c …
constantes : S,K,I,...
λ-termes : A,B, … M,N,P,... X,Y,Z
3 Règles de déparenthésage
(1) l'application associe à gauche
XYZ=(XY)Z
≠ X(YZ)
(2) l'abstraction associe à droite
λx λy Z = λx ( λy Z )
(3) application prioritaire sur l'abstraction
λx Y Z = λx ( Y Z )
≠
( λx Y ) Z
(4) suppression des parenthèses externes
Remarque (3) → la portée (ou champ) d'une abstraction s'étend
✔
✔
jusqu'à la fin de l'expression en l'absence de parenthèses
jusqu'à la parenthèse fermant l'expression contenant le λ sinon
exemples de portées :
λx λy
((λz z) x) y x
λx x (λu λy y x (λz z)) x y
4 Variables libres et liées
Une occurrence x est liée dans un terme si elle est dans le champ de λx. sinon elle dite libre
Liée par le λy le plus immédiatement à gauche
Libre en vert
y (λy λx λy y x) x z
occurrence
liée
occurrence
libre
Variable libre : au moins 1 occurrence libre de x, y, z
Variable liée : au moins une occurrence de liée : x, y
5 exercice 1
-------------
application associe à gauche
abstraction associe à droite
application prioritaire sur abstraction
parenthèse externe
5.1 Question 1
a) ( λx ( x (λy ( y x ) ) ) )
b) ( (λx x) (λy ( y x ) ) )
c) ( λx ( ( x (λy y) ) x ) )
d) ( ( (λx x) (λy y) ) x )
e) ( λx ( x ((λy y) x ) ) )
f) ( (λx x) ((λy y) x ) )
g) ( λx ( x ( λy y)) ) x )
h) ( λx ( λy ( λz ((x y) z) ) ) )
5.2 Question 2
h( ( (λx (λy (y x)))
(λx x) ) ( λx (x x)) )
( (λx (λy (y x)))
(λx x) ) ( λx (x x))
( (λx (λy y x))
(λx x) ) ( λx x x )
( (λx λy y x )
(λx x) ) ( λx x x )
(λx λy y x )
(λx x)
( λx x x )
N.B : dès qu'une parenthèse limite la porté d'un λ alors on ne peut pas l'enlever
i( λx ( ( λy (x y)) (λy (y x)) )
)
λx ( ( λy (x y)) (λy (y x)) )
λx ( ( λy x y ) (λy y x ) )
λx
( λy x y ) ( λy y x )
6 Substitution
[ N/x ] M ≡ substituer les termes N aux occurrences libres de x dans M
variable :
[N/x] x = N
[N/x] y = y
si
x≠ y
application : [N/x] (M P) = ( [N/x] M ) ( [N/x] P )
abstraction : [N/x] (λx M) = λx M
[N/x] (λy M) = λy( [N/x] M )
puisqu'il n'y a pas d'occurrences libres de x dans λx M
si x ≠ y et y non libre dans N:
soit y n'apparait pas dans N
soit toutes les occurrences de y dans N sont liées
N.B : Si y est libre dans N, on ne peut pas faire directement la substitution [N/x] (λy M)
[ y z /x ] ( λy x )
≠ λ y ( [ y z / x ] x ) = λy y z
Capture de la variable y !
Elle n'est plus libre alors qu'elle le devrait.
7 contractions
Introduction :
j'ai une expression : 2 + 3 . Si je la calcul je réduit en 5. Il y a une différence syntaxique entre : 5 et 2 + 3
mais égalité sémantique (sens). En λ-calcul on peut réduire des expressions ainsi tout en conservant le sens
…
7.1 α-contraction : renommage des variables liées
α
L' α-contraction est noté ⇒ c'est un renommage des variables liées.
α:
α
⇒ λy ( [y/x] M )
λx M
est une α-contraction avec y étant une variable non utilisé
Exemple :
λx x z
α
⇒ λy [y/x] x z = λy y z
capture
α
⇒ λz [z/x] x z = λz z z
7.2 β-contraction
paramètre formel
corps
β
β :
λx
M

  N ⇒ [ N / x ] M
fonction
arguments
L'argument (ou paramètre réel) est substitué au paramètre formel dans le corps de la fonction
On peut faire le parallèle avec un appel de fonction. Les paramètres lors de l'appel remplace les arguments.
7.3 η-contraction
η: λx M x
η
M si x non libre dans M
⇒
ça ressemble à une β-contraction : λx M x → [x/x] M
≡ M
car x ∉ M
Exemple 1 :
λx y x
η
⇒
y
car x non libre dans y
M
On vérifie :
β
⇒ [A/x] yx = yA
η
(λx y x) A ⇒ y A
(λx y x) A
yA=yA
les termes λx y x et y, considérés comme fonctions, produisent le même résultat lorsqu'on les applique à un
argument quelconque.
Exemple 2 :
η
λx x x ⇒
x
car x libre dans x
M
(λx x x) A
xA=xA
β
⇒ AA
α
⇒ est réflexive, symétrique et transitive.
λx x
α
⇒ λx ([x/x] x) = λx x
λx x
α
α
⇒ λy y ⇒ λx x
β
⇒
et
(λx x) a
a
η
⇒ ne sont ni réflexive, ni symétriques et ni transitives.
β
⇒ a
β
⇒ (λx x) a
Ces propriétés sont utiles pour les calculs
donc on étend les contractions en réductions en leurs ajoutant ces propriétés :
On a 2 extensions utiles :
✔
✔
réduction (noté →)
fermeture contextuelle, réflexive et transitive des α, β, η-contractions
On peut travailler sur des sous-expressions
✔
✔
l'équivalence (ou égalité ou conversion) notée =
fermeture symétrique de la réduction
Exemple :
(λx x) y → y mais y → (λx x) y
(λx x) y = y et y = (λx x) y
(λx x) y = (λzy) a
(λx x) y → y donc (λx x)y = y
(λz y) a → y donc (λz y)a = y
donc y
= (λz y)a
(λx x)y = (λz y)a
Remarque : substitution et α-conversion
[y/x] λz z x = λz z y car z non libre dans y
[y/x] λy y x
≠ λy [y/x] y x = λy y y
= [y/x] λz [z/y] y x
= [ y/x] λ z z x
= λz [y/x] z x
on a α-convertit en renommant la variable liée y
=λzzy
Forme normale :
β
λx x  
λy y x ⇒ [ λy y x/ x]= λy y x
M
N
En gros la forme normale c'est quand peut plus faire de β-contraction
La Fn de (λx x ) (λy y x) est λy y x
7.4 Exercice 2
a)
λx x  λy y x est en forme normale (f.n).
Pas de contraction possible, car si on parenthèse complétement : ( λx ( x (λy (y x)) ) ) on ne trouve pas de
redex : (λx M) N.
β
b)
λx x 
λy y x ⇒ λy y x
M
N
On pourrait être tenté de faire une β-contraction sur (λy y x) en premier mais non! Entièrement parenthésé
cela donne : (λy (y x)) qui n'est pas un β-radical : (λx M) N
c) λx x  λy y  x est en forme normale.
On ne trouve pas de redex dans sa forme entièrement parenthésé : λx ((x (λy y)) x)
β
β
d) λx x λy y x ⇒
[ λy y/ x] x  x =  λy y x ⇒ x

M
N
forme entièrement parenthésé : (((λx x) (λy y)) x) l'application associe à gauche.
β
e)
λx x  λy y  x  ⇒ λx x x
M
N
On s'arrête car λx x x n'est pas un redex.
En effet si on reparenthésé avec les bonnes priorités on a : λx (x x)
β
β
λx xλy y  x ⇒ λx x  x⇒ x
f)
M
N
ou encore un autre chemin est possible :
β
λx x 
λy y x →[λy y x/ x] x= λy y x ⇒ x

M
N
On obtient bien le même résultat. Ceci est une propriété très importante du λ-calcul on sait que pour deux
β-réduction différentes on pourra trouver par contraction successives le même résultat à une α-conversion
près.
g)
λx 
x λy y  x →[ x/ x] x λy y= x λy y
M
2)
N
 λx 
λy  y x λx
x λx x x

h)
β
M
N
⇒ [ λx x / x ] λy y x  λx x x =  λy 
y λx x 
λx x x
M
β
⇒ [ λx x x/ y] y  λx x=λx 
x x 
λx x
M
N
N
β
⇒ λx x λx x 
β
⇒ λx x
β
i)
λx [λy 
x y 
λy y x ] ⇒ λx  x λy y x 
M
N
Réduire :

λ x1 … λ xn M  
A1 … Am
n paramètres
m arguments
β
La portée de la substitution va jusqu'à la
fin de l'expression ou des parenthèses
( λx 1 ( 
λx 2 … λx n M ) 
A1 ) A2 … Am ⇒
M
N
β
([ A1 / x1 ] λx 2 … λ x n M ) A2 … Am = ( λx 2 ( … λ x n [ A1 / x1 ] M ) A2 ) … Am ⇒
β
([ A2 / x 2 ] λx 3 … λ xn [ A1 / x 1 ] M ) A3 … Am = ( λx 3 … λ x n [ A1 / x1 , A2 / x2 ] M ) A3 … Am ⇒
1er cas: n = m
Même nombres de parenthèses et d'arguments
*
λx 1 … λx n M  A1 … An ⇒ [ A1 / x1 … Am / x n ] M
2eme cas : n < m
Moins de paramètres que d'arguments
*
λx 1 … λx n M  A1 … An An1 … Am ⇒ [ A1 / x 1 … An / x n ] An1 ... Am
Il reste donc des arguments
3eme cas: n > m
Plus de paramètres que d'arguments
*
λx 1 … λx m λx m1 … λx n M  A1 … Am ⇒ λx m1 … λx n [ A1 / x 1 … Am / x n ] M
Il reste donc des paramètres
7.5 Exercice 3
Théorème de Church :
X
Si X → Y et X → Z alors il existe U tel que Y → U et Z → U.
Y
Autrement dit les β-contractions mènent à la même forme normale,
à une α-conversion près.
U
On appelle aussi cette propriété confluence.
L'exercice :
λy (λx (λy x) (λx x) x ) y
β (1)
β (3)
η (2)
λy (λz y) (λx x) y
λx (λy x) (λx x) x
λy (λx x x) y
β
α (4)
λy y y
β
M
N
λz
y


λx x
α-conv pour ne pas capturer y | pas de substitution x est liée
β
y
λy  λz
λx x x
α
α
(1)
η
λy y y
λy ( λx λy
xλx x  x  y )⇒ λy (


λx x y ⇒ λy y y
pas d'occurrences de z
η
N
λy λz
yλx x  y ⇒

car y libre dans M
M
η
(2)
λy 
λx λz x λx x x y ⇒ λx  λy x λx x x car y non libre dans M
M
β
(3)
λy  λx  λy x λx
x  x y ⇒ λy λx x x y

M
(4)
N
α | x/y
λy  λz yλx x y ⇒
α | y/z
Z
λxλz x λx x x ⇒ λx λy x λx x  x
y)
(λt (λx t x) t ) x
β (1)
η (3)
β (2)
(λz x z) x
(λt ( t t ) ) x
β
η
β
xx
xx
xx
η
(λt t t) x
α
xx
t libre dans t
β
x/ t ] λz t z  x = λz x z  x

(1) ( λt  λx t xt x ) ⇒ [ x/ t ] λx t x [ x /t ]t  = [
évite la capture
(2)
β
λt ( λx t xt ) x ⇒  λt ( t t ) x
η
( λt 
λx t x t ) x ⇒
car t libre dans M
M
(λx λy x y) (λx y y x)
β
λy (λx λy y x) y
η
β
λy λz z y
λx λy y x
α(1)
x/y
z/y
(1) λy λz z y ⇒ λx λz z x ⇒ λx λy y x
η
(λx x) (λx λy y x)
β
λx λy y x
8 Parallèle avec Ocaml
λ-calcul :
Ocaml :
ou encore :
FONC ≡ λf1 λf2 f1 f2
let fonc f1 f2= f1 f2
let fonc= fun f1-> fun f2-> f1 f2
Les abstractions sont les définitions de fonctions et les applications, les applications de fonctions...
L'application associe à gauche tout comme l'application de fonction caml : ( ((fonc a) b) c ) ici la fonction
est appliqué aux arguments a b c.
Idem pour l'association à droite.
9 Complétude combinatoire
Soient X 1 … X n , M , des termes clos (pas de variables libres) quelconques.
On peut toujours trouver au moins une fonction qui appliqué aux arguments X 1 , …
résultat M . Cette fonction peut utiliser ou non ses arguments.
minuscule: variables
majuscules: termes clos (pas de variables libres)
9.1 Exercice 4
Regarder la dernière page du polycopié de cours sur le λ-calcul.
Fichier : "poly cours lambda calcul.pdf"
9.1.1 Question 1
trouver P /P X Y Z → Y X Y
inconnue: P
X,Y,Z : termes clos quelconques
1ere solution :
P = λx λy λz y x y
on vérifie :
P X Y Z= λx λy λz y x y X Y Z
β
⇒ λy λz y X yY Z
β
⇒Y X Y
2nd solution :
P' = λx λy λz Y X Y
P' X Y Z = (λx λy λz X Y Z) X Y Z = Y X Y
3éme solution :
p'' = λx λy λz Y x y
X n , renvoie le
Les autres solutions :
Q/QXY→A
Q = λx λy A
R/ R XY Z → Z
R = λx λy λz z
R' = λx λy λz Z
S/S X → λt X A t
S = λx λt x A t
S' = λx λt X A t
T/ T X Y → X ( λz Y X )
T = λx λy x (λz y x)
...
U / U X → X (λz z) A
U = λx x (λz z) A
U' = λx X (λz z) A
9.2 Exercice 5
T = λx λy x y
F = λx λy y x
Not = ..
IF = …
clos
∧
B
T
F
NOT
IF
OR
AND
→
True
False
¬
…
if
or
and
imp
On aura une bonne représentation de B si les λ-termes se comportent comme les opérateurs booléens
(normalement on souligne les opérateurs du λ-calcul dans le cours)
9.2.1 Not :
Dans B:
¬True = False
¬False = True
Dans
∧ :
NOT T
=λv 
v λx F  λx T  T

M
N
=T  λx F  λx T 
=λx λy x y λx F  λx T 
=λx F λx T 
=F ( pas de var libre dans F )
A rajouter : un parallèle avec caml
9.2.2 IF
Dans B:
if TRUE A B = A
if FALSE A B = B
Dans
∧ :
IF T A B = ( λv λa λb v (λx a) (λx b ) T A B
= T(λx A) (λx B)
=(λx λy x y) (λx A) (λx B)
=(λx A) (λx B)
=A
9.2.3 Représentation du OR
Dans B :
A
∨ B = if A True B
Dans
∧ :
OR A B = IF A T B
OR = λa λb IF a T b
OR T T = IF T T T = T
OR T F = IF T T F = T
9.2.4 AND
Dans B:
a and b = if A B False
= ¬¬ A∨¬B
Dans ∧ :
AND A B = IF A B F
= NOT(OR (NOT A) (NOT B))
AND = λa λb IF a b F
= λa λb NOT ( OR ( NOT a) (NOT b))
9.2.5 Implique
Dans B :
A → B = ¬ A∨B
Dans
∧ :
IMP A B = OR (NOT A) B
IMP
= λa λb OR (NOT a) b
9.3 Exercice 6
9.3.1 Termes solvables
Donner un sens aux termes du λ-calcul : représenter les fonctions calculables.
ℕ , ℕ → ℕ , ℕ x ℕ , ℕ x ℕ → ℕ …
1ére idée :
✔
Forme normale (on rappel qu'elle est unique)
Si le terme a une F.N, elle représente le résultat du calcul
sinon le terme ne représente pas une fonction calculable.
✔
Trop restrictif :
l'opérateur de point fixe Y = λF (λx F(xx)) (λx F(xx))
n'a pas de F.N, et cependant il permet d'exprimer la récursivité, les boucles
2nd idée fonction :
Un terme M représente une fonction si, appliqué à des arguments il produit un résultat en F.N. Dans un 1er
temps, on impose résultat = λx x = I cette contrainte n'est pas restrictive , car on montre :
M solvable ≡ ∀ P ∃ p et Y 1 …Y p tel que M Y 1 …Y p =P
Démonstration :
✔
M solvable
⇒
?
∃ p ,Y 1 …Y p tel que M Y 1 …Y p =P
✔
M solvable
⇒
∃n X 1 … X n tel que M X 1 … X n = I
→
M X 1 … X n  P=I P=P
→
∃ p =n1 ,
X 1 =Y 1 , … X n  =Y n  , X p = p tel que M X 1 … X p =P
∀ P ( ∃ p ,Y 1 …Y p tel que M Y 1 …Y p =P )
?
⇒ M' solvable
Prenons P = I
dans
∃ p ,Y 1 …Y p tel que M Y 1 …Y p =I
donc M solvable
3éme idée :
Fnt close (forme normale de tête)
tête: pas une sous expr
M est en F.n.t s'il s' écrit
pas necessairement en F.n ou F.n.t

λ x1 … λ x n
x

A1 … A p
peut être ou non un des x i
Traduction Ocaml :
 fun x 1 ->… -> fun xn -> x A1 … A p 
n∈ℕ , p∈ℕ
La variable x est appelé variable de tête.
Un terme clos ne contient pas de variables libres.
Une F.n.t close ne contient pas de variables libre donc elle commence forcement par un lambda, et x
appartient forcement à un λx i .
Exemple :
(n=3, p=0 )
 fun x -> fun y -> fun z -> z  
λx λy λz z
en F.n.t
x
x((λx y)a)
(λx y) a
λx y a
est en F.n.t (n=0, p=0 )
en F.n.t
(n=0,p=1 )
n'est pas en F.n.t ((fun x → y) a) on aurais voulue (fun x → y a) par exemple
en F.n.t
pas d'arguments A
Y n'a pas de F.n
Y a une infinité de F.n.t.
Y =λ F ( λx 
F ( x x ) λx
F  x x )

M
N
β
⇒ 
λ F F  λx F  xxλx F x x en F.n.t close
tête
β
⇒ 
λ F F  F  λx F  xx  λx F  x x en F.n.t close
tête
On montre : M est en F.n.t close → M solvable
M en F.n.t close
→
M =λ x1 … λ xn xi A1 … A p i∈1… n
Traduisons M en caml :
let fonc x1 x2 … xn = xi a1 … ap
On veut que fonc renvoie la fonction identité (par exemple let id x = x)
Pour cela il faut que la fonction xi renvoi id d'où :
let xi a1 … ap = id
maintenant pour être sur que fonc renvoie id il faut lui donner xi à tous ses arguments
fonc xi … xi
Formellement :
M =λ x1 … λ xn xi A1 … A p i∈1… n
→
M
λ y1 … λ y p I  ... λ y 1 … λ y p I 
 

→
fonc xi prend p argument
n arguments de fonc
=λ x 1 … λ x n x i A1 … A p λ
y1 … λ y p I ... λ y 1 … λ y p I 

=λ y 1 … λ y p I  A' 1 … A ' p
=I
n fois
Car I est clos.
9.4 Termes séparables
On a 2 λ- termes ayant un fnt clos
Ces 2 termes représentent-ils la même fonction ?
✔
✔
s'ils ont une F.n close il suffit de calculer leur F.n et de les composer ( à une α-conversion près )
s'ils ont seulement un F.n.t close, mais pas de f.n ils peuvent avoir une propriété de F.n.t , et il n'est
donc pas possible en général de comparer les F.n.t
Intuitivement M et N sont séparables si on peut trouver des arguments X 1 … X n tels que M et N appliqués
à ces arguments produisent des résultats différents.
Pour la définition on prendra :
T = λx λy x
F = λx λy y
1er exemple :
M = T, N = F
∃n=0 tel que T =T , F =F
2nd exemple :
M = λx λy x y
N = λx λy y x
✔
✔
n=0?
non car M ≠T ,
N ≠F
n=1?
Trouver un terme clos X tel que M X = T et N X = F
Résoudre le système :
{
{
λx λy x y X =T
 λx λy y x X =F ≡
?X
MX =T
NX =F ≡
?X
{
λy X y=T (1)
λy y X =F (2)
?X
On résout (1) :
λy X y = λx λy x
α-conv possible car X clos :
λx X x = λx λy x
X x = λy x
2 solutions :
X = λz λy x
X = λz λy z
non clos donc on l'élimine
ok
On remplace X par λz λy z
dans (2) :
?
λx λy y x λz λy z= λx λy y
?
λy y  λz λy z = 
λx λy y

≠en fn
en fn
✔
n=2?
MXY = T
VXY = F
?X,Y
≡
(λx λy xy) X Y = T
(λx λy yx) XY = F
{
XY =T 1
YX =F 2
? X ,Y
on résout (1) :
XY = T 2 solutions simples :
X = λz T
X = λz z
avec Y quelconque (a priori plus intéressant car Y non instancié)
avec Y = T
on remplace X par λz T
dans (2)
Y( λzT) = F
1 solution évidente : Y = λz F
Donc on a trouvé n = 2,
X 1=λz T ,
X 2= λz F
Donc M et N sont séparables
tel que
M X 1 X 2 =T et N X 1 X 2 =F
10 Feuille 2
Représentation "personnelle" des booléens
B
∧
Deux éléments distincts : TRUE et FALSE
Deux termes clos séparables quelconques : T F
NOT et IF :
sera -t-il toujours possible de trouver NOT et IF
∀ T et F séparable ?
opérateurs : ¬ si alors sinon
termes separables quelconques
M et N séparables alors ∃ X 1 … X n
tel que
M X 1 … X n= F et N X 1 X n =T
On sait M X 1 … X n= λx λy y
N X 1 … X n= λx λy x
On veut NOT T = F
NOT F = T
Donc il suffit de prendre
NOT V =V X 1 … X n
il reste à trouver n , X 1 … X n
en résolvant un système d'équations
10.1 Exercice 1
T = λx x et F = λx λy y
On prend
✔
NOT V =V X 1 … X n
n=0?
NOT V = V
NOT T = F
NOT F = T
✔
↔
n= 1 ?
NOT T = F
NOT F = T
NOT ?
insoluble
NOT V = VX
TX=F
FX=T
?X
(1) à une solution :
(2) est résolue
donc
T=F
F=T
X
=F
λy y = T
?X
X=F
(1)
(2)
λx λy x
NOT V = V F
NOT = λv v F
On cherche IF ( représentation de si alors sinon)
On veut
IF T A B = A
IF F A B = B
IF?
On prend
✔
IF V A B=V X 1 … X n A B
n=1?
IF V A B = V X A B
(1) ↔ T X A B = A
FXAB=B ↔
?X
✔
XAB=A
A B = B → insoluble
?X
n=2?
IF V A B = V X Y A B
(1) ↔
TXYAB=A
FXYAB=B ↔
?X,Y
XYAB=A
YAB =B
? X,Y
X = λy λa λb a
1 solution évidente : Y = λa λb b
donc
IF V A B=V  λy λa λb a λa λb b A B
IF V =V  λy λa λb a λa λb b
F
IF =λv v  λy λa λb a
λa λb b
IF =λv λa λb v λy λa λb a F a b
λv λa  λb ( 
v λy λa λb a F a ) b
forme etat-reduite
forme etat-expensée
M
10.2 Exercice 2
T = λx λy x y x
F = λx λy y y y
Remarque :
en position de fonction
TXY=XYX
FXY=YYY
fonction
Donc on doit pouvoir construire tous les opérateurs avec n = 2
On cherche NOT
(1)
NOT T = F
NOT F = T
?NOT
on définit NOT V = V X Y
(1) ↔
TXY=F
FXY=T
? X,Y
↔
XYX=F
YYY=T
? X,X
1 sol évidente
X = λy λx F
Y = λy λz T
Donc NOT = λv v ( λy λx F) (λy λz T)
Résolution d'équations en λ-calcul
A≠ B
X A = B → 1 solution X = λx B
?X
X A = A → 2 solutions X = λx A
?X
X = λx x
X Y = A → 2 solutions "simples"
?X,Y
X = λx A et Y non instancié
X = λx x et Y = A
→ 1 infinité d'autres solutions : X = λy Z y T et résoudre Z Y T = A
? Z,Y,T
Donc résoudre une équation → très simple en général
1 système d'équations → trouver une solution commune
heuristique : commencer par l'équation qui impose le plus de contraintes sur ses solutions, ou par l'équation
la plus complexe.
0
: ℕ
succ : ℕ → ℕ
n → suc(n)
pred : ℕ → ℕ
0→0
succ(n) → n
zero : ℕ → B
n → ( n=0 ?)
Système numérique = représentation de ℕ
{ 0 , succ, pred, zero }
∀ n∈ℕ succ(n) = succ bar n
pred 0 = 0
pred (suc(n)) = n
zero 0 = π
(0)
(1)
(2)
(3)
zero (succ(n)) = F
(4)
Donc 3 4 sont une représentation de B
bar π noté T = λx λy x
bar F noté F = λxλy y
1er exemple :
Le système de Church vu en cours noté { 0, succ, pred, zero }
2eme exemple :
{ 0, succ, pred, zero }
0 = λx x
succ = λn λx x F n
pred = ?
zero = ?
1 représentation n de tout entier n cette représentation doit vérifier (0)
✔
0
=
Recherche de la solution

0
0 fois
Tout les trucs soulignés en double reste souligné en double même si pas noté :
ℕ
1 =
succ(0)
pour vérifier (0)
=
def
β
succ 0 = (λn λx x Fn) 0 = 
λx x F 0
1 fois
2= succ1=succ 1= λn λx x F n1=λx x F 1=
λx x F ( λx x F 0 )
2 fois
Attention ya des n qui devraient souligné reprendre le td de quelqu'un
Introduisons une notation pour pouvoir représenter l'itérateur n :
n
W x=(
W ( W ... (W x ) ) )
n fois
On propose donc :
n =λx x F n 0
On prouve que cette représentation vérifie (0) c-a-d : suc(n) = succ n
succ(n) =λx x F succ n 0= λx x F n1 0
pas de β-radical
succ n= λn λx x F nn
définition de succ
β-réduction
=λx x F n
n
définition de n
=λx x F  λx x F  0
n1
= λx x F ( 
λx x F ( …( λx x F 0 ) ... ) )= λx x F  0

nfois
Donc n+1 fois
On recherche une représentation zero de zero qui vérifie
zero 0
=T
zero succ(n) = F
(3)
(4)
Dans ℕ :
0≠succ n
Dans ∧ :
0 et succ(n) sont des représentants de 0 et de succ(n) donc ils sont séparables
donc il existe n , X 1 … X n tels que : 0 X 1 … X n =T et succn X 1 … X n =F
Donc il suffit que zero applique son argument aux bons X 1 … X n pour produire T et F
On définit donc
zero N =N X 1 … X n reste à trouver n , X 1 … X n
{
zero 0=T
zero succ n=F ↔
? zero
✔
{
0 X 1 … X n=T 5
succ n= X 1 … X n =F 6
?n, X 1… X n
n=1?
(5) ≡ 0 X = T ≡ (λx x) X = T
≡ X=T
On remplace X par T dans (6)
succ(n) T = F ≡ succ n T = F ≡
(λn λx x F n) n T = F
≡ T F n = F ≡ (λx λy x) F n = F ≡ F = F
Donc (6) résolue avec :
zero N = N T
zero = λn nT= λn n (λx λy x)
10.3 Question 3
On cherche une représentation pred de pred qui vérifie
pred 0 = 0
pred succ(n) = n
(1)
(2)
Soit pred N =N X 1 … X n
On cherche
✔
n , X 1… X n
n=1?
pred N = N X On résout (1)
(1)
pred 0=0 X = λx x X = X =0
On remplace X par 0 dans (2)
pred suc(n) = suc(n) 0 = succ n 0 = (λn λx x F n) n 0 = 0 F n = F n
(2)
impossible
=λx λy yn=λy y= n
✔
n=2?
pred N =N X Y
(1)
pred 0=0 XY = X Y = 0 (4)
(2)
pred suc n=suc n X Y =succ n X Y = X F n Y = n (5)
On résout (5)
X F n Y = n → 1 solution X F = T → 1 solution X = λx T non solution de (4)
→ 1 solution "sémantique"; X = NOT, Y non instanciée
On remplace X par NOT dans (4)
NOT Y = 0
(λv v F T )Y = 0
Y F T = 0 → 1 solution simple : Y = λx λy 0
donc zero N = N T
zero = λn n T
= λn n (λx λy x)
Donc pred = N NOT (λx λy 0)
pred = λn n NOT (λx λy 0)
Vérification :
pred 0 = (λn n NOT ( λx λy 0)) 0 = 0 NOT (λx λy 0) = NOT (λx λy 0 )
= (λv v F T ) (λx λy 0) = (λx λy 0) F T = 0
10.4 Exercice 2 : le système numérique de Church
Axiomes :
0
= λ F λx x
succ = λn λF λx F(nFx)
théorèmes
{
n
n=λF λx F x
n
n est un itérateur
n F x= F x
*= λF λx λy F  x , y
10.4.1 Question 1
On montre que P = λn λm n m est une représentation de puissance dans ℕ
ℕ
m^n est noté puis n m , x*y noté * x y
définition récursive puis 0 n = 1
puis (suc n) m = * m (puis n m)
Cette définition utilise n,succ et *
1
On doit contrôler que P vérifie (1) et (2)
On a besoin des représentations n, suc et *
Ok, puisqu'on les connait dans Church
✔
thm
P0n=1?
n
η
1 = λF λx F x= λ F λ x F x ⇒ λF F
thm
0 = λF λx x
α
P 0 n=0 n= λ F λx xn= λx x ⇒ λF F
On vérifie bien le première axiome n0 =1
N.B : la multiplication dans Church : mult a b=λx a bx 
.
P suc n m=* m P n m ? ∀ n ,∀ m∈ℕ
P suc n m = suc n m = suc n m = ( λn λF λx F(nFx)) n m
= λx m (n m x)
n ( P n m ) = (λF λx λy F(x,y)) m (P n m) = λy m (P n m y) = λy m (n m y) = csup α λx m (n m x)
10.4.2 Question 2
On montre que D = λn λm n pred n
est une représentation de diff.
Dans N diff x y = si x y alors x - y sinon 0
la définition utilise : si ,  , - , 0 , n
Dans ∧ :
la définition utilise n, pred
Il faut transformer une des deux définitions, la transformation est plus facile dans ℕ
Dans ℕ :
diff n m = si
 m alors n - m sinon 0
n - m = si nm
alors
(1)
m
pred n sinon indéfini
pred(0) = 0
pred( suc n) = n
(2)
(3)
(4)
d'après (1)
nm alors n - m sinon 0
m
(2)
nm alors pred n sinon 0
m
m
= si nm alors pred n sinon pred n
(3)
m
= pred n
diff n m = si
= si
∧ : D = λn λm m pred n
ℕ : diff x y = si x y alors x - y sinon 0
m
= pred n
on doit montrer
N.B :
D n m = dif n m
n
n F x=F x
D n m = ( λn λm m pred n ) n m
= m pred n
= pred
m
n
définition de D
β-réduction
théorème vu dans Church
=
pred ( pred ( …( pred n )… )
m fois
= pred( pred ( … ( pred n ) … )
= pred( pred ( … ( pred n ) … )
m
= pred n
= diff n m
Donc D = diff
D est une représentation de la fonction diff.
car pred est une représentation de pred
11 FEUILLE 3
Opérateur de point fixe :
Y' opérateur de point fixe ≡
∀F
Y ' F =F Y ' F 
Ici = désigne une β-conversion et pas nécessairement une β-réduction.
11.1 Exercice 1
11.1.1 Question 1
Y = λf ( λx f( x x ) ) ( λx f( x x ) )
Y F = ( λf ( λx f( x x )) ( λx f( x x )) ) F
(Y est appelé combinateur paradoxal de Curry)
définition de Y
β(1)
β-réduction par nom
β(2)
β-réduction
(λx F( x x )) (λx F( x x ))
⇒
⇒ F ( (λx F( x x )) (λx F( x x )) )
≡ YF mais YF se réduit en cette expression
YF
F( YF)
(1) (2)
(1)
F( ( λx F( x x ) ) ( λx F(x x)))
Donc YF = F( YF)
11.1.2 Question 2
Y b =λx λy y x x y λx λy y x x y
Y b F =( λx 
λy y  x x y 
λx λy y x x y ) F
M
N
Y b F =( λy
y ( ( λx λy y ( x x y ) ) ( λx λy y ( x x y ) ) y ) 
F
M
N
Y b F =F (
 λx λy y x x y λx λy y x x y  ) F = F Y b F 
≡ Yb
β-réduction
β-réduction par nom
Pour tout opérateur de point fixe Y
YF = F(YF) = F ( F(YF)) = … F( F( … F( YF) … ) ) = …
Y représente un mécanisme qui permet de ré appliquer indéfiniment la fonction f sur elle même.
→ boucles récursivité
problème de l'arrêt :
Y n'a pas de forme normale
Y F peut avoir ou non une f.n
✔
F = I = λx x
YF= YI = I( YI ) = YI = …
pas de f.n
✔
F = λx λy y
YF = F YF = λx 
λy y Y
F

M
β-reduc par nom
=
λy y f.n
N
Donc Y représente le mécanisme de la récursivité mais c'est F qui décide de l'arrêt
Y 0 F=(W S B W B F )
=
=
=
=
W = λx λy x y y
S (B W B) (B W B) F
(B W B F) (B W B F)
W (B F) (B W B F)
BF (B W B F) (B W B F)
S = λx λy λz x z ( y z )
B = λx λy λz x (y z)
=F  
BWBF B W B F  
Y 0 se réduit en ce terme
donc
Y 0 F= F Y 0 F 
donc Y 0 opérateur du point fixe
11.1.3 Question 3
Y 0 =WS BWB
Y i 1 =Y i SI 
On montre :
∀i
✔
Y i =S I Y i par récurrence
i = 0 vérifier Y 0 =SI Y 0
S I Y 0 X =I X Y 0 X 
= X Y 0 X 
=Y 0 X
Donc
S I Y 0 =Y 0
car on à montré ∀ X
X Y 0 X =Y 0 X
✔
On suppose Y i =SI Y i (hypothèse de récurrence)
on montre Y i 1 =SI Y i 1
Y i 1 =Y i SI 
=SI Y i SI 
=I SI Y i SI 
=SI Y i SI 
=SI Y i 1
définition de Y i
hypothèse de récurrence
réduction de S
réduction de I
définition de Y i 1
Pour tout i
Y i F=S I Y i F
=IF Y F 
=F Y F 
d'après question précédente
réduction de S
réduction de I
Donc Y i est un opérateur de point fixe.
11.2 Exercice 2
ge : greater equal
Dans ℕ
 :
ge x y = si y = 0
alors T
sinon si x = 0 alors F
sinon ge (pred x) (pred y)
ge est une fonction récursive, qui utilise zero?, pred, si alors sinon, et ge
Dans ∧ :
ge = λx λy …
ge ….
Problème : ge n'est pas encore défini. Si on essai de remplacer ge par sa définition, on obtient un un λterme infini !
Le λ-calcul n'est pas un langage récursif mais on peut l'implémenter.
On va abstraire le représentant de ge ( c'est à dire le mettre en paramètre) :
ge=
λg λx λy …. g …. ge
F ge : fonctionnelle
Fonctionnelle : fonction de fonction. Ici appliqué à ge, elle produit ge.
ge= F ge ge
on peut voir ceci comme une équation d'inconnue ge
✔
✔
ge est solution de l'équation d'inconnue X : X =F ge X
ge est un point fixe de la fonctionnelle F ge
(1)
On a montré que ∀ F on a Y F = F (Y F)
Donc, avec
F =F ge on a Y F ge=F Y F ge 
Donc Y F ge est solution de (1)
Donc on prend
ge=Y F ge
La solution
✔
✔
définition de la récursivité de ge
ge = λx λy IF( zero x) T [ IF( zero y) F [ ge ( pred x ) ( pred y ) ] ]
définition de la fonctionnelle non récursive F ge
ge= λg λx λy IF  zero xT  IF  zero y F g  pred x  pred yge
F ge= λg λx λy IF  zero xT  IF zero y F g  pred x pred y
✔
équation de point fixe
ge=F ge ge
✔
une solution de cette équation ge=Y F ge donne une définition non récursive de ge
Exemple :
( on abandonne le soulignement )
F = λg λx λy IF( zero x ) T ( IF(zero y) F ( g ( pred x) (pred y)))
ge = YG
ge 2 1 = Y G 2 1
définition de ge
= G( Y G ) 2 1
= IF( zero 2) F ( IF ( zero 1) T ( Y G ( pred 2) (pred 1))
= YG ( pred 2 ) ( pred 1 )
β-réduction de YG
définition de F et β-réduction par nom
β-réduction de (zero 2) et ( zero 1) par
valeur. et β-réduction des 2 IF
= YG 1 0
β-réduction de pred par valeur, car elle se
termine
= G(YG) 1 0
= IF ( zero 1) F ( IF ( zero 0 ) T ( … ) )
β-réduction de YG
définition de F, β-réduction par nom
=T
β-réduction de zero par valeur et des deux
IF
Dans ℕ :
définition récursive de x over y
x over y = si x geslant y alors succ( { x-y} over y) sinon 0
En préfixé : div x y = si ge x y alors succ ( div (moins x y ) y ) sinon 0
Dans ∧ :
✔
définition récursive
div = λx λy IF ( ge x y ) ( suc ( div ( moins x y ) y )) 0
✔
Fonctionnelle récursive
G_"div" = color red {λg} λx λy IF ( ge x y ) ( succ ( colore red {g} ( moins x y ) y)) 0
✔
définition non récursive
div = YG_"div"
représentation de Church {0 , suc , zero, pred }
autre représentation quelconque {0 , suc , zero, pred }
Chercher
∅ / ∅ n = n forall n in setN
n = succ^n 0 calcul dans
= succ^n 0 car
ℕ
est une représentation de ℕ
= n succ 0 ( on a forall F forall n F^n x = n F x; n est un itérateur)
= ( λn n succ 0 ) n
On veut n =
∅ n ; donc on prend ∅ = λn n suc 0
Chercher Ψ / Ψ n = n
On essaiela mèthode précédente :
n = succ^n 0
= suc^n 0
= n suc 0
Impossible de faire apparaître car on ne sait rien du système → n n'a pas de
propriétés particuliére à part le fait qu'il représente n
On examine les premiers entiers
Ψ0=0
trouver une expression ou apparaît 1
Ψ 1 = 1 = suc 0 = suc 0 = suc( Ψ 0 ) = suc( Ψ (pred 1)) = suc ( Ψ ( pred 1 )
N | Church |cas precedent | N | 2nd représentaton
Ψ 2 = 2 = suc 1 = suc 1 = suc ( Ψ 1) = suc ( Ψ (pred2 )) = suc ( Ψ ( pred 2 )
Donc n = 0
n>0
Ψ0=0
Ψ n = suc ( Ψ ( pred n )
On prouve par récurrence que Ψ n = n
n=0
Ψ0=0
donc OK
on suppose Ψ n = n
on vérifie Ψ suc n = suc n
Ψ suc n = suc ( Ψ ( pred ( suc n)))
= suc ( Ψ ( pred ( succ n )))
= suc ( Ψ n )
= suc n suc n hypothèse de récurence
✔
Définition récursive de Ψ
Ψ = λn IF (zero n) 0 ( suc ( Ψ ( pred n)))
✔
Fonctionnelle non récursive
G_Ψ = color red {λg} λn IF ( zero n ) 0 ( suc ( color red {g} ( pred n )))
✔
définition non récursive de Ψ
Ψ = Y G_Ψ
1) On cherche feuille tel que feuille (var n) = T forall n , feuille (paire a b) = F forall a, b
On remarque var n = λ v v n
paire a b = λv λp p a (v b)
On essaie donc Feuille a = a X Y
(1)
↔
{
var n X Y =T
paire a b X Y = F equiv
? X ,Y
Une solution simple
{
X n Y =T
Y a  X b= F
{
X = λx λy T
Y =λx λy F
Donc Feuille a = a (λx λy T) (λx λy F)
Feuille = λa a (λa λy T) (λχ λy F)
var = λn λv v n
paire = λa λb λv λp p a (v b)
Feuille = λa a (λx λy T) (λx λy F)
Valeur = λa a (λx x)
On cherche Valeur tel que Valeur ( var n ) = n (1)
pas d'équation pour valeur ( paire a b )
On essaie valeur a = a X
(1) ↔ var n X = n
Xn=n
X = λx x
donc valeur a = a (λx x)
donc valeur = λa a (λx x)
On cherche gauche tel que gauche( paire a b ) = a
On essaie gauche a = a X Y
paire a b X Y = a
Ya(Xb)=a
solution Y = λx λy x
X quelconque ( par exemple λx x )
donc gauche = λa a (λx x) (λx λy x)
On cherche droit tel que droit ( paire a b ) = b
on essaie droit a = a X Y
paire a b X Y = b
Y a (X b) = b
solution :
X = λx x
Y = λx λy y
✔
Définition par cas :
arbre2 ( var n
) = var ( * 2 n )
arbre2 ( paire a b ) = paire ( arbre2 a ) ( arbre2 b )
Définition récursive sans filtrage
arbre2 a = IF ( feuille a ) ( var ( * 2 ( valeur a )))
( paire ( arbre2 ( gauche a) )
( arbre2 (droit a) ) )
En λ-calcul
G_arbre2 = λg λa IF ( feuile a ) ( var ( * 2 ( valeur a)))
( paire ( color red g ( gauche a ))
( color red g ( droit a ))
)
arbre2 = YG_arbre2
miroir ( var n ) = var n
miroir ( paire a b ) = paire ( miroir b ) ( miroir a )
miroir a = IF ( feuillek a ) a
( paire ( miroir ( droit a)) ( miroir ( gauche a) ) )
G_miroir = λg λa IF ( feuille a ) a
( paire ( color red g ( droit a ) ) ( color red g ( gauche a )))
miroir = Y G_miroir
Téléchargement