Académique Documents
Professionnel Documents
Culture Documents
c) Quand dit-on qu'une grammaire non contextuelle G est en Forme Normale de Chomsky ?
Quelle est la propriété fondamentale d'une telle grammaire ?
Une grammaire non contextuelle est en forme normale de Chomsky si et seulement toutes
ses règles de production sont de la forme:
1. X --> YZ
2. ou X --> a
3. ou S --> ε
De plus, toute grammaire non contextuelle peut etre transformé grammaire equivalente en
forme de chomsky
Et, regle importante, la derivation d'un mot de longueur n > 0 se fait toujours en 2n-1
étapes
Soit M[x := N] le résultat du remplacement dans M de toutes les occurences libres de x par N (où
M,N ∈ Λ)
La subsitution est dite valide si aucune des occurrences libres de N ne devient liée dans
M[x =: N]
Tout terme de F du lambda-calcul possède un point fixe que l'on peut calculer
∀F ∈ Λ, ∃X ∈ Λ tel que F.X=X
Note : Λ = L(F)
alors :
X ≡ WW ≡ ( λx.F(xx))W -(beta)-> F(xx)[x := W] ≡ F(WW) ≡ FX
donc : X = FX
Exercice 1:
Soit G1 = {N1,T1,S,P1} la grammaire non contextuelle déinie par
N1 = {S,A,B,C,D,E},
T1 = {a,b,c}
P1 = {S->AA | BB | D,
A->Aa | ε,
B->bBc | ε,
C->c,
D->E}
Z1 = {A,B}
Z2 = {A,B,S}
Z3 = {A,B,S} = Z2
Ainsi ici:
PREM[SV] = PREM[S]
PREM[a] = {a}
PREM[b] = {b}
http://www.fil.univ-lille1.fr/~mailliet/portail/AS/documents/g1/slides_analyse_descendante.pdf
Exercice 3:
Soit le mot: ((λx((λx(xy))y))((λx(xx))(λx(xx))))
a) Montrer que c'est un terme du lamba-calcul après avoir rappelé la grammaire utilisée
On appelle temres du λ-calcul les éléments du langage engendré par la grammaire non
contextuelle G = (N,T,S,P) tel que:
T = {λ , ( , ) , v1, v2 , ...}
N = {S, V}
P = {S->V | (λVS) | (SS)}
{V->v1 | v2 ...}
Verifions ((λx((λx(xy))y))((λx(xx))(λx(xx)))) ∈ Λ:
Le mot est donc vérifié à l'aide d'un arbre.
Aide : Pour construire l'arbre, commencer par decouper le mot en fonction des poids des
paranthèses, on part ensuite d'un S et on descend l'arbre en partant du poids le plus petit
jusqu'au plus grand
b) Quelles sont ses occurrences libres, ses occurences liées, ses variables libres, ses variables
liées?
Rappel :
- Une occurrence est une variable qui n'est pas directement liée à un λ
- Une occurrence est liée si elle est englobé pas un λ(occurence)
- Une occurrence est libre si elle n'est pas liée
- Une variable est libre si dans le mot, au moins une occurrence de cette variable est
libre sinon elle est liée
On a donc:
x : 5 occurrences liées et 0 libre ==> x est une variable liée
y : 0 occurence liée et 2 libres ==> y est une variable libre
Rappel : un β-rédex peut etre défini par une abstraction (λVS) qui a été dérivé à partir du
membre gauche d'une application (SS)
Exemple:
d) Montrer qu'il est normalisable en explicitant une suite adéquate de réductions (en
précisant les β-rédex utilisés) et en montrant que les substitutions utilisées sont valides
((λx((λx(xy))y))((λx(xx))(λx(xx))))
On a donc, ((λx(xy))y) -(β)-> (xy)[x := y] ≡ yy , qui est valide car aucune occurrence libre n'est
devenue liée
On remarque aussi que la "yy" est bien une forme normalisée
Ainsi, le mot est bien normalisable si on utilise le β-rédex n°2 par exemple
e) Est-il fortement normalisable?
Rappel : Un mot est fortement normalisable si pour chaque β-rédex réduit , le mot est une forme
normalisée
Or, on remarque que la β-réduction à donnée strictement le même mot, ainsi, le même si l'on
faisait autant de fois que nécessaire le processus de réduction, cela ne se terminerait jamais.
Ainsi, Le mot ((λx((λx(xy))y))((λx(xx))(λx(xx)))) n'est pas fortement normalisable
Exercice 4:
a) Trouver le résultat de l'évalutation de l'expression Scheme suivante :
Réponse:
-Le let sur la première ligne correspond à un define multiple, et donc, la variable x sera égal à 3
et y sera égal à 2
-Le let de la seconde ligne va inverser les valeurs de x et y, ainsi x sera égal à 2 et y à 3
-La derniere ligne fait l'addition entre x et x pour ensuite prendre le resultat et faire le produit
entre celui-ci et y
Ce qui peut etre traduit par : y*(x + x) = 3*(2+2) = 3*4 = 12
Réponse:
Commentons chaque lignes:
-Let set sur la premiere ligne permet de dire que la fonction f(x)= x+x va etre créé (meme si dans
la deuxieme ligne, on peut voir que f devient g
-Le let de la deuxieme ligne defini la fonction f pour que f(x) = x*x et g(x) = x+x
-la troisieme ligne fait le calcul, ce qui donne :
(f(3) + g(5)) = [(3*3)+(5+5)] = [9+10] = 19
c) Ecrire en Scheme une fonction appelée comp qui, à deux fonctions associe la composée de ces
deux fonctions