Langages Formels
Langages Formels
Langages Formels
1 Introduction
Langages reconnaissables
Langages formels
Automates d’arbres
Paul Gastin
Grammaires
Paul.Gastin@lsv.ens-cachan.fr
http://www.lsv.ens-cachan.fr/~gastin/Langages/ Langages algébriques
L3 Informatique Cachan
2014-2015
Automates à pile
Analyse syntaxique
Fonctions séquentielles
1/197 2/197
Motivations Références
[7] Olivier Carton.
Langages formels, calculabilité et complexité.
Vuibert, 2008.
Définition : [9] John E. Hopcroft et Je↵rey D. Ullman.
1. Description et analyse (lexicale et syntaxique) des langages (programmation, Introduction to automata theory, languages and computation.
naturels, . . . ) Addison-Wesley, 1979.
2. Modèles de calcul [10] Dexter C. Kozen.
3. Abstractions mathématiques simples de phénomènes complexes dans le but de Automata and Computability.
I Prouver des propriétés. Springer, 1997.
I Concevoir des algorithmes permettant de tester des propriétés ou de résoudre [13] Jacques Sakarovitch.
des problèmes. Éléments de théorie des automates.
4. Types de données Vuibert informatique, 2003.
[8] Hubert Comon, Max Dauchet, Remi Gilleron, Florent Jacquemard, Denis
Lugiez, Sophie Tison, Marc Tommasi.
Tree Automata Techniques and Applications.
http://www.grappa.univ-lille3.fr/tata/
3/197 4/197
Références Références
[5] Jean-Michel Autebert, Jean Berstel et Luc Boasson.
[1] Alfred V. Aho, Ravi Sethi et Je↵rey D. Ullman. Context-Free Languages and Pushdown Automata.
Compilers: principles, techniques and tools. Handbook of Formal Languages, Vol. 1, Springer, 1997.
Addison-Wesley, 1986. [6] Jean Berstel.
[2] Alfred V. Aho et Je↵rey D. Ullman. Transduction and context free languages.
The theory of parsing, translation, and compiling. Volume I: Parsing. Teubner, 1979.
Prentice-Hall, 1972. [11] Jean-Éric Pin.
[3] Luc Albert, Paul Gastin, Bruno Petazzoni, Antoine Petit, Nicolas Puech et Automates finis et applications.
Pascal Weil. Polycopié du cours à l’École Polytechnique, 2004.
Cours et exercices d’informatique. [12] Grzegorz Rozenberg et Arto Salomaa, éditeurs.
Vuibert, 1998. Handbook of Formal Languages,
[4] Jean-Michel Autebert. Vol. 1, Word, Language, Grammar,
Théorie des langages et des automates. Springer, 1997.
Masson, 1994. [14] Jacques Stern.
Fondements mathématiques de l’informatique.
Mc Graw Hill, 1990.
5/197 6/197
Plan Bibliographie
Introduction
[4] Jean-Michel Autebert.
2 Langages reconnaissables
Théorie des langages et des automates.
Mots Masson, 1994.
Langages [7] Olivier Carton.
Automates déterministes Langages formels, calculabilité et complexité.
Automates non déterministes Vuibert, 2008.
Automates avec "-transitions [9] John E. Hopcroft et Je↵rey D. Ullman.
Propriétés de fermeture Introduction to automata theory, languages and computation.
Langages rationnels Addison-Wesley, 1979.
Critères de reconnaissabilité [10] Dexter C. Kozen.
Minimisation Automata and Computability.
Springer, 1997.
Logique MSO
Morphismes et congruences [13] Jacques Sakarovitch.
Éléments de théorie des automates.
Vuibert informatique, 2003.
Automates d’arbres
Langages algébriques
Mots Mots
9/197 10/197
Langages Langages
Langage = sous-ensemble de ⌃⇤ .
Exemples.
Itération : L0 = {"},
S L
n+1
= Ln S · L = L · Ln ,
L⇤ = n 0 Ln , L+ = n>0 Ln .
Opérations sur les langages : soient K, L ✓ ⌃⇤ Exemples : ⌃n , ⌃⇤ , (⌃2 )⇤ .
11/197 12/197
Automates déterministes Automates déterministes
Définition : Automate déterministe
A = (Q, , i, F )
Q ensemble fini d’états, i 2 Q état initial, F ✓ Q états finaux, Langage accepté (reconnu) par A : L(A) = {u 2 ⌃⇤ | (i, u) 2 F }.
: Q ⇥ ⌃ ! Q fonction de transition (totale ou partielle). Exemples.
Exemples.
u
Calcul de A sur un mot u = a1 · · · an : q0 ! qn Définition : Reconnaissables
a
1 an Un langage L ✓ ⌃⇤ est reconnaissable, s’il existe un automate fini A tel que L =
q0 ! q1 · · · qn 1 ! qn L(A).
Généralisation de à Q ⇥ ⌃⇤ :
(q, ") = q,
(q, u · a) = ( (q, u), a) si u 2 ⌃⇤ et a 2 ⌃.
13/197 14/197
15/197 16/197
Automates non déterministes Automates avec "-transitions
Un automate (D ou ND) est complet si 8p 2 Q, 8a 2 ⌃, (p, a) 6= ;. Exemple.
On peut toujours compléter un automate.
Définition : Automate avec "-transitions
Un automate (D ou ND) est émondé si tout état q 2 Q est
u A = (Q, T, I, F )
I accessible d’un état initial : 9i 2 I, 9u 2 ⌃⇤ tels que i ! q, Q ensemble fini d’états, I ✓ Q états initiaux, F ✓ Q états finaux,
u
I co-accessible d’un état final : 9f 2 F , 9u 2 ⌃⇤ tels que q ! f T ✓ Q ⇥ (⌃ [ {"}) ⇥ Q ensemble des transitions.
On peut calculer l’ensemble Acc(I) des états accessibles à partir de I et l’ensemble
coAcc(F ) des états co-accessibles des états finaux. 1 a an
Un calcul de A est une suite q0 ! q1 · · · qn 1 ! qn avec (qi 1 , ai , qi ) 2 T pour
tout 0 < i n.
Corollaire :
Soit A un automate. Ce calcul reconnaı̂t le mot u = a1 · · · an (les " disparaissent).
1. On peut construire B émondé qui reconnaı̂t le même langage.
Remarque : Soit A un automate. On peut construire un automate sans
2. On peut décider si L(A) = ;.
"-transition B qui reconnaı̂t le même langage.
17/197 18/197
Définition : Proposition :
Problème du vide : étant donné un automate fini A, décider si L(A) = ;. La famille Rec(⌃⇤ ) est fermée par les opérations ensemblistes (union, complément,
. . . ).
Problème du mot : étant donnés un mot w 2 ⌃⇤ et un automate A, décider si
w 2 L(A). Preuve
Union : construction non déterministe.
Théorème : vide et mot Intersection : produit d’automates (préserve le déterminisme).
Le problème du vide et le problème du mot sont décidables en NLOGSPACE pour Complément : utilise la déterminisation.
les langages reconnaissables donnés par automates (déterministe ou non, avec ou
sans "-transitions). Corollaire :
On peut décider de l’égalité ou de l’inclusion de langages reconnaissables.
Plus précisément, soient L1 , L2 2 Rec(⌃⇤ ) donnés par deux automates A1 et A2 .
Preuve
On peut décider si L1 ✓ L2 .
C’est de l’accessibilité.
19/197 20/197
Propriétés de fermeture Propriétés de fermeture
Opérations liées à la concaténation
Si L ✓ ⌃⇤ , on note
Proposition : I Pref(L) = {u 2 ⌃⇤ | 9v 2 ⌃⇤ , uv 2 L},
Rec(⌃⇤ ) est fermée par concaténation et itération. I Su↵(L) = {v 2 ⌃⇤ | 9u 2 ⌃⇤ , uv 2 L},
I Fact(L) = {v 2 ⌃⇤ | 9u, w 2 ⌃⇤ , uvw 2 L}.
Concaténation :
Méthode 1 : union disjointe des automates et ajout de transitions. Proposition :
Méthode 2 : fusion d’états.
On suppose que les automates ont un seul état initial sans transition entrante et Rec(⌃⇤ ) est fermée par préfixe, suffixe, facteur.
un seul état final sans transition sortante.
Itération : Preuve
Méthode 1 : ajout de transitions. Ajouter un état pour reconnaı̂tre le mot vide. Modification des états initiaux et/ou finaux.
Méthode 2 : ajout d’"-transitions.
21/197 22/197
Proposition :
Preuve
La famille des langages reconnaissables est fermée par morphisme et morphisme
Modification des états initiaux et/ou finaux. inverse.
1. Si L 2 Rec(A⇤ ) et f : A⇤ ! B ⇤ est un morphisme alors f (L) 2 Rec(B ⇤ ).
Exercice : 2. Si L 2 Rec(B ⇤ ) et f : A⇤ ! B ⇤ est un morphisme alors f 1
(L) 2 Rec(A⇤ ).
Montrer que si de plus K est reconnaissable, alors on peut e↵ectivement calculer
Preuve
les nouveaux états initiaux/finaux.
Modification des transitions de l’automate.
23/197 24/197
Propriétés de fermeture Propriétés de fermeture
Proposition :
Définition : Substitutions
La famille des langages reconnaissables est fermée par substitution rationnelle et
Une substitution est définie par une application : A ! P(B ⇤ ). substitution rationnelle inverse.
Elle s’étend en un morphisme : A⇤ ! P(B ⇤ ) défini par
(") = {"} et 1. Si L 2 Rec(A⇤ ) et : A ! Rec(B ⇤ ) est une substitution rationnelle alors
(a1 · · · an ) = (a1 ) · · · (an ). (L) 2 Rec(B ⇤ ).
2. Si L 2 Rec(B ⇤ ) et : A ! Rec(B ⇤ ) est une substitution rationnelle alors
⇤
S 1
(L) 2 Rec(A⇤ ).
Pour L ✓ A , on note (L) = u2L (u).
Pour L ✓ B ⇤ , on note 1
(L) = {u 2 A⇤ | (u) \ L 6= ;}.
Une substitution est rationnelle (ou reconnaissable) si elle est définie par une appli- Preuve
cation : A ! Rec(B ⇤ ).
1. On remplace des transitions par des automates.
2. Plus difficile.
25/197 26/197
27/197 28/197
Langages rationnels Langages rationnels
Définition :
Théorème : Kleene, 1936
Deux ER E et F sont équivalentes (noté E ⌘ F ) si L(E) = L(F ).
Rec(⌃⇤ ) = Rat(⌃⇤ )
Exemples : commutativité, associativité, distributivité, . . .
Preuve
Peut-on trouver un système de règles de réécriture caractérisant l’équivalence des ◆ : les langages ; et {a} pour a 2 ⌃ sont reconnaissables et la famille
ER ? Rec(⌃⇤ ) est fermée par union, concaténation, itération.
Oui, mais il n’existe pas de système fini.
✓ : Algorithme de McNaughton-Yamada.
Comment décider de l’équivalence de deux ER ?
On va utiliser le théorème de Kleene. Corollaire :
L’équivalence des expressions rationnelles est décidable.
Abus de notation :
• On ne souligne pas les lettres de ⌃ : ((a + b)⇤ ). Preuve
• On enlève les parenthèses inutiles : (aa + bb)⇤ + (aab)⇤ . Il suffit de l’inclusion Rat(⌃⇤ ) ✓ Rec(⌃⇤ ).
• On confond langage rationnel et expression rationnelle.
29/197 30/197
31/197 32/197
Critères de reconnaissabilité Critères de reconnaissabilité
Exercice : Puissance des lemmes d’itérations Théorème : Ehrenfeucht, Parikh, Rozenberg ([13, p. 128])
1. Montrer que les langages suivants satisfont (1) mais pas (2) : Soit L ✓ ⌃⇤ . Les conditions suivantes sont équivalentes :
1. L est reconnaissable
K1 = {w 2 {a, b}⇤ | |w|a = |w|b } 2. Il existe N > 0 tel que pour tout mot x = uv1 . . . vN w 2 ⌃⇤ avec |vi | 1, il
existe 0 j < k N tels que pour tout n 0,
K10 p n
= {b a | p > 0 et n est premier} [ {a} ⇤
2. Montrer que le langage suivant satisfait (2) mais pas (3) : x2L ssi uv1 . . . vj (vj+1 . . . vk )n vk+1 . . . vN w 2 L
K2 = {(ab)n (cd)n | n 0} [ ⌃⇤ {aa, bb, cc, dd, ac}⌃⇤ 3. Il existe N > 0 tel que pour tout mot x = uv1 . . . vN w 2 ⌃⇤ avec |vi | 1, il
existe 0 j < k N tels que
3. Montrer que le langage suivant satisfait (3) mais n’est pas reconnaissable :
x2L ssi uv1 . . . vj vk+1 . . . vN w 2 L
K3 = {udv | u, v 2 {a, b, c}⇤ et soit u 6= v soit u ou v contient un carré}
Remarque : la preuve utilise le théorème de Ramsey.
33/197 34/197
Pour montrer qu’un langage n’est pas reconnaissable, on peut aussi utiliser les
Il y a une infinité d’automates pour un langage donné.
propriétés de clôture.
35/197 36/197
Automate des résiduels Congruences et quotients
Définition : Résiduels
Définition : Congruence sur les automates
Soient u 2 ⌃⇤ et L ✓ ⌃⇤ .
Le résiduel de L par u est le quotient u 1 ⇤
L = {v 2 ⌃ | uv 2 L}. Soit A un automate DC. Une relation d’équivalence ⇠ sur Q est une congruence si
I 8p, q 2 Q, 8a 2 ⌃, p ⇠ q implique (p, a) ⇠ (q, a),
Exemple : Calculer les résiduels des langages I F est saturé par ⇠, i.e., 8p 2 F , [p] = {q 2 Q | p ⇠ q} ✓ F .
Pn
Lj = {u = u0 u1 · · · un 2 {0, 1}⇤ | u2 = i
i=0 ui 2 ⌘ j [3]}. Le quotient de A par ⇠ est A/⇠ = (Q/⇠, ⇠ , [i], F/⇠)
où ⇠ est définie par ⇠ ([p], a) = [ (p, a)].
Définition : Automate des résiduels
Soit L ✓ ⌃⇤ . L’automate des résiduels de L est R(L) = (QL , L , iL , FL ) avec Exemple :
1 ⇤
I QL = {u L | u 2 ⌃ },
Donner un automate DCA A à 6 états qui ‘calcule’ u2 mod 3 et accepte L1 .
1 1 1 1
I
L (u L, a) = a (u L) = (ua) L, Exhiber une congruence non triviale sur A.
1 Calculer le quotient A/⇠.
I iL = L = " L,
1 1 1
I FL = {u L|"2u L} = {u L | u 2 L}.
Proposition :
Théorème :
A/⇠ est bien défini et L(A/⇠) = L(A).
Un langage L ✓ ⌃⇤ est reconnaissable ssi L a un nombre fini de résiduels.
37/197 38/197
39/197 40/197
Algorithme de Moore Logique sur les mots
Pour n 0, on note ⌃n = ⌃0 [ ⌃1 [ · · · [ ⌃n et on définit l’équivalence ⇠n sur
Définition : Syntaxe de MSO(⌃, <)
Q par
p ⇠n q ssi L(A, p) \ ⌃n = L(A, q) \ ⌃n ' ::= ? | Pa (x) | x < y | x 2 X | ¬' | ' _ ' | 9x ' | 9X '
ssi 8w 2 ⌃n , (p, w) 2 F () (q, w) 2 F
avec a 2 ⌃, {x, y, . . .} variables du premier ordre, {X,Y,. . . } variables monadiques
Remarque 1 : ⇠0 a pour classes d’équivalence F et Q \ F . du second ordre.
Remarque 2 : ⇠n+1 est plus fine que ⇠n , i.e., p ⇠n+1 q =) p ⇠n q.
T
Remarque 3 : ⇠ = n 0 ⇠n , i.e., p ⇠ q ssi 8n 0, p ⇠n q. Définition : Sémantique de MSO(⌃, <)
Proposition : Soit A automate DC Soit w = w1 w2 · · · wn 2 ⌃+ un mot et pos(w) = {1, 2, . . . , n} les positions du mot.
Soit une valuation :
I p ⇠n+1 q ssi p ⇠n q et 8a 2 ⌃, (p, a) ⇠n (q, a).
(x) 2 pos(w) si x est une variable du premier ordre et
I Si ⇠n = ⇠n+1 alors ⇠ = ⇠n . (X) ✓ pos(w) si X est une variable monadique du second ordre.
I ⇠ = ⇠|Q| 2 si ; =
6 F 6= Q et ⇠ = ⇠0 sinon.
w, |= Pa (x) si w (x) = a
Permet de calculer l’équivalence de Nerode par raffinements successifs.
w, |= x < y si (x) < (y)
Exercice : w, |= x 2 X si (x) 2 (X)
Calculer l’automate minimal par l’algorithme d’Hopcroft de raffinement de partitions w, |= 9x ' si 9 i 2 pos(w) tel que w, [x 7! i] |= '
en O(n log(n)) (l’algo naı̈f est en O(n2 ) avec n = |Q|). w, |= 9X ' si 9 I ✓ pos(w) tel que w, [X ! 7 I] |= '
41/197 42/197
43/197 44/197
Morphismes Morphismes
Définition : Reconnaissance par morphisme Théorème :
I ' : ⌃⇤ ! M morphisme dans un monoı̈de fini M . Soit L ✓ ⌃⇤ . L est reconnaissable par morphisme ssi L est reconnaissable par
L ✓ ⌃⇤ est reconnu ou saturé par ' si L = ' 1 ('(L)). automate.
I L ✓ ⌃⇤ est reconnu par un monoı̈de fini M s’il existe un morphisme
' : ⌃⇤ ! M qui reconnaı̂t L. Corollaire :
I ⇤
L ✓ ⌃ est reconnaissable par morphisme s’il existe un monoı̈de fini qui Rec(⌃⇤ ) est fermée par morphisme inverse.
reconnaı̂t L.
Exemple :
Définition : Monoı̈de de transitions p
Si L est reconnaissable alors L = {v 2 ⌃⇤ | v 2 2 L} est aussi reconnaissable.
Soit A = (Q, ⌃, , i, F ) un automate déterministe complet.
Le monoı̈de de transitions de A est le sous monoı̈de de (QQ , ⇤) engendré par les Exercices :
applications a : Q ! Q (a 2 ⌃) définies par a (q) = (q, a) et avec la loi de
1. Montrer que Rec(⌃⇤ ) est fermée par union, intersection, complémentaire.
composition interne f ⇤ g = g f .
2. Montrer que Rec(⌃⇤ ) est fermée par quotients.
Proposition : Si L 2 Rec(⌃⇤ ) et K ✓ ⌃⇤ alors K 1 L et LK 1
sont reconnaissables.
⇤
Le monoı̈de de transitions de A reconnaı̂t L(A). 3. Montrer que Rec(⌃ ) est fermée par concaténation (plus difficile).
45/197 46/197
Théorème :
Soit L ✓ ⌃⇤ .
Exercice : Congruence à droite
I ⌘L est une congruence et ⌘L sature L.
1. Montrer que L ✓ ⌃⇤ est reconnaissable ssi il est saturé par une congruence à
I ⌘L est la plus grossière congruence qui sature L. droite d’index fini
I L est reconnaissable ssi ⌘L est d’index fini. 2. Soit u ⌘rL v si 8y 2 ⌃⇤ , uy 2 L () vy 2 L.
Montrer que ⌘rL est la congruence à droite la plus grossière qui sature L.
Définition : Monoide syntaxique
3. Faire le lien entre ⌘rL et l’automate minimal de L
Soit L ✓ ⌃⇤ . ML = ⌃⇤ / ⌘L .
Théorème :
Soit L ✓ ⌃⇤ .
I ML est le monoı̈de de transitions de l’automate minimal de L.
I ML divise (est quotient d’un sous-monoı̈de) tout monoı̈de qui reconnaı̂t L.
On peut e↵ectivement calculer le monoı̈de syntaxique d’un langage reconnaissable.
49/197 50/197
Exercice :
Montrer que le langage ((a + cb⇤ a)c⇤ b)⇤ est sans étoile.
51/197 52/197
Sans étoile et logique du premier ordre Plan
Introduction
Théorème : Mc Naughton, Papert 1971
Langages reconnaissables
Un langage L ✓ ⌃+ est sans étoile si et seulement si il est définissable par une
formule de la logique du premier ordre FO(⌃, <).
3 Automates d’arbres
Exemple : Le langage (aa)⇤ n’est pas définissable en FO(⌃, <). Arbres
Exercice : Automates d’arbres
Termes
Montrer que le langage ((a+cb⇤ a)c⇤ b)⇤ est définissable en logique du premier ordre:
FO(⌃, <). Ascendant / Descendant
Déterminisme
Théorème : Lemme d’itération
Un langage L ✓ ⌃+ est sans étoile si et seulement si il est définissable par une Congruences
formule ' 2 FO3 (⌃, <) qui utilise au plus 3 noms de variables. Minimalité
Logique MSO
Exercice :
Montrer que ((a + cb⇤ a)c⇤ b)⇤ est définissable par une formule de FO3 (⌃, <). Grammaires
Automates à pile
55/197 56/197
Arbres Automates d’arbres
Définition : Terminologie
Définition : Automate
La racine de l’arbre est le mot vide " 2 dom(t).
Un nœud de l’arbre est un élément u 2 dom(t). Un automate d’arbres est un quadruplet A = (Q, ⌃, , F ) où
Une feuille de l’arbre est un nœud u 2 dom(t) tel que ud1 2
/ dom(t). I Q est un ensemble fini d’états
Le nombre de nœuds (taille) de l’arbre est |t| = |dom(t)|. I ⌃ est un alphabet fini
La hauteur de l’arbre est H(t) = max{|u| | u 2 dom(t)}. S
I ✓ n Qn ⇥ ⌃ ⇥ Q est l’ensemble fini des transitions
La frontière Fr(t) de l’arbre t est la concaténation des étiquettes des feuilles de t. I F ✓ Q est l’ensemble des états finaux.
L’arité d’un nœud u 2 dom(t) est max{n | udn 2 dom(t)} (max ; = 0).
L’arité d’une feuille est 0. Définition : Calcul, langage
Les fils d’un nœud u 2 dom(t) d’arité n sont les nœuds ud1 , . . . , udn 2 dom(t). I Un calcul de l’automate A sur un arbre t 2 Tp (⌃) est un arbre ⇢ 2 Tp (Q)
ayant même domaine que t et tel que pour tout u 2 dom(t) d’arité n, on a
Définition inductive de Tp (⌃) (notation préfixe) (⇢(u · d1 ), . . . , ⇢(u · dn ), t(u), ⇢(u)) 2 .
Si a 2 ⌃ alors t = a 2 Tp (⌃) : dom(t) = {"} et t(") = a I Le calcul est acceptant si ⇢(") 2 F .
Si a 2 ⌃ et t1 , . . . , tn 2 Tp (⌃) avec 1 n p alors t = a(t1 , . . . , tn ) 2 Tp (⌃) : I L(A) est l’ensemble des ⌃-arbres acceptés par A.
Sn
I dom(t) = {"} [
i=1 di dom(ti ), I Un langage d’arbre est reconnaissable s’il existe un automate d’arbres qui
I t(") = a et la racine de t est d’arité n, l’accepte.
I t(di v) = ti (v) pour 1 i n et v 2 dom(ti ).
57/197 58/197
59/197 60/197
Termes Termes
Définition : Un terme est un arbre avec symboles typés
I F un ensemble fini de symboles de fonctions avec arités.
I On note Fn les symboles d’arité n. Exemple : Expressions logiques
I X un ensemble de variables (arité 0) disjoint de F0 (les constantes). F2 = {^, _, !, , . . .}, F1 = {¬}, F0 = {>, ?}, X = {p, q, r}
I T (F, X ) ensemble des termes sur F et X défini inductivement par :
I F0 [ X ✓ T (F , X ), ^(_(¬(p), q), _(¬(q), r)) = (¬p _ q) ^ (¬q _ r)
I si f 2 Fn (n 1) et t1 , . . . , tn 2 T (F , X ) alors f (t1 , . . . , tn ) 2 T (F , X )
Remarque : on peut aussi utiliser une notation suffixe ou infixe parenthésée. Exemple : Expressions arithmétiques
I Free(t) est l’ensemble des variables de t. F2 = {+, , ⇥, /, . . .}, F1 = {sin, cos, ln, !, . . .},
I T (F) l’ensemble des termes qui ne contiennent pas de variable (termes clos). F0 = {0, . . . , 9} et X = {x, y, . . .}.
I Un terme t est linéaire s’il contient au plus une occurrence de chaque variable.
+(3, ⇥(2, !(x))) = 3 + (2 ⇥ x!)
I Hauteur : H(x) = 0 pour x 2 X et H(f ) = 0 pour f 2 F0 et
H(f (t1 , . . . , tn )) = 1 + max(H(t1 ), . . . , H(tn )).
I Taille : |x| = 0 pour x 2 X et |f | = 1 pour f 2 F0 et
|f (t1 , . . . , tn )| = 1 + |t1 | + · · · + |tn |.
61/197 62/197
63/197 64/197
Vision ascendante Vision descendante
Définition : calcul descendant
Définition : calcul ascendant Soit A = (Q, ⌃, , I) un automate d’arbres. S
n
Soit A = (Q, ⌃, , F ) un automateSd’arbres. On voit comme une fonction : Q ⇥ ⌃ ! 2 n Q .
On voit comme une fonction : n Qn ⇥ ⌃ ! 2Q . L’étiquetage d’un calcul est construit à partir de la racine en descendant vers les
L’étiquetage d’un calcul est construit à partir des feuilles en remontant vers la racine. feuilles.
L’étiquette de la racine doit être dans I.
Exemples : On dit que I est l’ensemble des états initiaux.
1. Évaluation d’une formule close du calcul propositionnel. Exemples :
2. Arbres de la forme t = f (g(t1 ), f (t2 , a)) 2 Tp (⌃).
1. Arbres de la forme t = f (g(t1 ), f (t2 , a)) 2 Tp (⌃).
Définition : Déterminisme ascendant 2. Évaluation d’une formule close du calcul propositionnel.
S n
Un automate A = (Q, ⌃, , F ) est déterministe ascendant si : Q ⇥⌃ ! Q
n Définition : Déterminisme descendant
est une fonction (partielle si A n’est pas complet).
Un automate A = (Q, ⌃, , I) est déterministe descendant s’il a un seul état initial
Exercice : et si pour tous q 2 Q, a 2 ⌃ et n 0 on a | (q, a) \ Qn | 1.
Parmi les automates d’arbres vus précédemment, quels sont ceux qui sont
Exercice :
déterministes ascendants ?
Parmi les automates d’arbres vus précédemment, quels sont ceux qui sont
déterministes descendants ?
65/197 66/197
La concaténation t · t0 = t[t0 /2] est le ⌃-arbre (avec ou sans trou) obtenu en Exemples :
appliquant la substitution [t0 /2] à l’arbre t. I L = {f (g n (a), g m (a)) | n, m 0} est reconnaissable.
L’ensemble T2 (⌃) est un monoı̈de avec comme élément neutre 2. I L = {f (g n (a), g n (a)) | n 0} n’est pas reconnaissable.
I L’ensemble des instances de f (x, x) n’est pas reconnaissable.
Exemple :
I Associativité. Soit F2 = {f } et F0 = {a, b}.
Soient t1 = c(a, 2, b) et t2 = c(a, b). Un langage L ✓ T (F) est associativement clos si il est fermé par la
Le langage L = t⇤1 t2 est reconnaissable. congruence engendrée par f (f (x, y), z) = f (x, f (y, z)).
Remarque : le langage Fr(L) des mots de feuilles de L est {an bn | n > 0}. Soit t1 = f (f (a, 2), b) et t2 = f (a, b).
t⇤1 t2 est reconnaissable mais sa clôture associative n’est pas reconnaissable.
69/197 70/197
On a
q ⇠m q 0 () Lm m
2 (Aq ) = L2 (Aq 0 )
75/197 76/197
Exercices Logique sur les arbres
Définition : Syntaxe de MSO(⌃, #1 , . . . , #p )
' ::= ? | Pa (x) | x #1 y | · · · | x #p y | x 2 X | ¬' | ' _ ' | 9x ' | 9X '
avec a 2 ⌃, {x, y, . . .} variables du premier ordre, {X,Y,. . . } variables monadiques
Exercice : Morphisme du second ordre.
Montrer que L ✓ T (F) est reconnaissable ssi il existe une F-algèbre finie A(F)
telle que L = ' 1 ('(L)) où ' : T (F) ! A(F) est le morphisme canonique. Définition : Sémantique de MSO(⌃, #1 , . . . , #p )
Soit t : A⇤p ! ⌃ un ⌃-arbre d’arité au plus p.
Exercice : Problèmes de décision et complexité Soit une valuation :
Lire la section 7 du chapitre 1 du TATA. (x) 2 dom(t) si x est une variable du premier ordre et
(X) ✓ dom(t) si X est une variable monadique du second ordre.
t, |= Pa (x) si t( (x)) = a
t, |= x #i y si (y) = (x) · di
t, |= x 2 X si (x) 2 (X)
t, |= 9x ' si 9 u 2 dom(t) tel que t, [x 7! u] |= '
t, |= 9X ' si 9 U ✓ dom(t) tel que t, [X ! 7 U ] |= '
77/197 78/197
79/197 80/197
Logique sur les arbres Plan
Introduction
Preuve 4 Grammaires
=) : Si L est reconnu par un automate A ayant n états Q = {q1 , . . . , qn }, on écrit Type 0 : générale
une formule de la forme ' = 9X1 · · · 9Xn (X1 , . . . , Xn ) qui caractérise l’existence Type 1 : contextuelle (context-sensitive)
d’un calcul acceptant de A sur un arbre t 2 Tp (⌃). Type 2 : hors contexte (context-free, algébrique)
Xi est l’ensemble des nœuds de t pour lesquels le calcul est dans l’état qi . Grammaires linéaires
La formule assure que les transitions de l’automate sont respectées.
Hiérarchie de Chomsky
(= : On construit facilement des automates pour les formules atomiques.
On utilise les propriétés de clôture des langages reconnaissables : Langages algébriques
union (_), complémentaire (¬) et projection (9x et 9X).
Automates à pile
Fonctions séquentielles
Grammaires de type 0 Grammaires de type 0
Définition : Grammaires générales (type 0)
G = (⌃, V, P, S) où
I ⌃ est l’alphabet terminal
Définition : Langage engendré
I V est l’alphabet non terminal (variables)
Soit G = (⌃, V, P, S) une grammaire et ↵ 2 (⌃ [ V )⇤ .
I S 2 V est l’axiome (variable initiale) ⇤
Le langage engendré par ↵ est LG (↵) = {u 2 ⌃⇤ | ↵ ! u}.
I P ✓ (⌃ [ V )⇤ ⇥ (⌃ [ V )⇤ est un ensemble fini de règles ou productions. b ⇤
Le langage élargi engendré par ↵ est LG (↵) = { 2 (⌃ [ V )⇤ | ↵ ! }.
n Le langage engendré par G est LG (S).
Exemple : Une grammaire pour {a2 | n > 0} Un langage est de type 0 s’il peut être engendré par une grammaire de type 0.
Définition : Dérivation
↵ 2 (⌃ [ V )⇤ se dérive en 2 (⌃ [ V )⇤ , noté ↵ ! , s’il existe (↵2 , 2) 2 P tel
que ↵ = ↵1 ↵2 ↵3 et = ↵1 2 ↵3 .
⇤
On note ! la clôture réflexive et transitive de !.
83/197 84/197
Grammaires contextuelles Grammaires contextuelles
85/197 86/197
87/197 88/197
Langages de Dyck Grammaires linéaires
Définition : Dn⇤ Définition : Grammaire linéaire
La grammaire G = (⌃, V, P, S) est
Soit ⌃n = {a1 , . . . , an } [ {ā1 , . . . , ān } l’alphabet formé de n paires de parenthèses.
Soit Gn = (⌃n , V, Pn , S) la grammaire définie par S ! a1 Sā1 S +· · ·+an Sān S +". I linéaire si P ✓ V ⇥ (⌃⇤ [ ⌃⇤ V ⌃⇤ ),
Le langage Dn⇤ = LGn (S) est appelé langage de Dyck sur n paires de parenthèses I linéaire gauche si P ✓ V ⇥ (⌃⇤ [ V ⌃⇤ ),
I linéaire droite si P ✓ V ⇥ (⌃⇤ [ ⌃⇤ V ).
Exercices : Langages de Dyck
Un langage est linéaire s’il peut être engendré par une grammaire linéaire.
1. Montrer que
D1⇤ = {w 2 ⌃⇤1 | |w|a1 = |w|ā1 et |v|a1 |v|ā1 pour tous v w}. On note Lin la famille des langages linéaires.
2. On considère le système de réécriture (type 0) Rn = (⌃n , Pn0 ) dont les règles
sont Pn0 = {(ai āi , ") | 1 i n}. Exemples :
⇤
Montrer que Dn⇤ = {w 2 ⌃⇤n | w ! " dans Rn }. I Le langage {an bn | n 0} est linéaire.
⇤
3. Soit un alphabet disjoint de ⌃n , ⌃ = ⌃n [ et L ✓ ⌃ un langage. I Le langage {an bn cp | n, p 0} est linéaire.
⇤ ⇤
On définit la clôture clot(L) = {v 2 ⌃ | 9w 2 L, w ! v dans Rn }.
Montrer que si L est reconnaissable, alors clot(L) aussi. Proposition :
On définit la réduction red(L) = {v 2 clot(L) | v !
6 dans Rn }. Un langage est rationnel si et seulement si il peut être engendré par une grammaire
Montrer que si L est reconnaissable, alors red(L) aussi. linéaire gauche (ou droite).
89/197 90/197
Langages reconnaissables
Définition :
Automates d’arbres Soit G = (⌃, V, P, S) une grammaire.
Grammaires Un arbre de dérivation pour G est un arbre t étiqueté dans V [ ⌃ [ {"} tel que
chaque nœud interne u est étiqueté par une variable x 2 V et si les fils de u portent
les étiquettes ↵1 , . . . , ↵k alors (x, ↵1 · · · ↵k ) 2 P .
5 Langages algébriques
Arbres de dérivation De plus, si k 6= 1, on peut supposer ↵1 , . . . , ↵k 6= ".
Propriétés de clôture
Exemple :
Formes normales et algorithmes
Arbres de dérivation pour les expressions.
Problèmes sur les langages algébriques Mise en évidence des priorités ou de l’associativité G ou D.
Forme normale de Greibach
Équations algébriques
Automates à pile
93/197 94/197
Analyse syntaxique
Fonctions séquentielles
Arbres de dérivation Grammaires et automates d’arbres
Lemme : Dérivations et arbres de dérivation
Soit G = (⌃, V, P, S) une grammaire.
⇤
1. Si x ! ↵ une dérivation de G alors il existe un arbre de dérivation t de G tel
que rac(t) = x et Fr(t) = ↵.
⇤
2. Si t un arbre de dérivation de G alors il existe une dérivation rac(t) ! Fr(t) Théorème :
dans G. 1. Soit L un langage d’arbres reconnaissable.
⇤
Si Fr(t) 2 ⌃⇤ alors on peut faire une dérivation gauche rac(t) !g Fr(t). Le langage Fr(L) des frontières des arbres de L est algébrique.
Une dérivation est gauche si on dérive toujours le non terminal le plus à gauche. 2. Soit L0 un langage algébrique propre (" 2
/ L0 ).
Il existe un langage d’arbres reconnaissable L tel que L0 = Fr(L).
Remarques :
I 2 dérivations sont équivalentes si elles sont associées au même arbre de
dérivation.
I Il y a bijection entre dérivations gauches terminales et arbres de dérivation
ayant une frontière dans ⌃⇤ .
I Si la grammaire est linéaire, il y a bijection entre dérivations et arbres de
dérivations.
95/197 96/197
Ambiguı̈té Lemme d’itération
Définition : Ambiguı̈té
I Une grammaire est ambiguë s’il existe deux arbres de dérivations (distincts) de
même racine et de même frontière.
I Un langage algébrique est non ambigu s’il existe une grammaire non ambiguë Théorème : Bar-Hillel, Perles, Shamir ou Lemme d’itération
qui l’engendre. Soit L 2 Alg, il existe N 0 tel que pour tout w 2 L,
si |w| N alors on peut trouver une factorisation w = ↵u v avec
Exemples :
|uv| > 0 et |u v| < N et ↵un v n 2 L pour tout n 0.
I La grammaire S ! SS + aSb + " est ambiguë mais elle engendre un langage
non ambigu. Exemple :
I La grammaire E ! E + E | E ⇥ E | a | b | c est ambiguë et engendre un Le langage L1 = {an bn cn | n 0} n’est pas algébrique.
langage rationnel.
Proposition : Tout langage rationnel peut être engendré par une gram- Corollaire :
maire linéaire droite non ambiguë. Les familles Alg et Lin ne sont pas fermées par intersection ou complémentaire.
99/197 100/197
Propriétés de clôture Transductions rationnelles
Proposition :
1. La famille Alg est fermée par concaténation, itération. Définition : Transduction rationnelle
2. La famille Alg est fermée par substitution algébrique. Une transduction rationnelle (TR) ⌧ : A⇤ ! P(B ⇤ ) est la composée d’un morphisme
inverse, d’une intersection avec un rationnel et d’un morphisme.
3. Les familles Alg et Lin sont fermées par union et miroir.
4. Les familles Alg et Lin sont fermées par intersection avec un rationnel. ∩K
C∗ C∗
5. Les familles Alg et Lin sont fermées par morphisme.
6. Les familles Alg et Lin sont fermées par projection inverse. ϕ−1 ψ
7. Les familles Alg et Lin sont fermées par morphisme inverse. τ
A∗ B∗
103/197 104/197
Grammaires propres Grammaires quadratiques
Définition : Grammaires propres
La grammaire G = (⌃, V, P, S) est propre si P ✓ V ⇥ ((⌃ [ V )+ \ V ),
i.e., elle ne contient pas de règle de la forme x ! " ou x ! y avec x, y 2 V . Définition : Forme normale de Chomsky
Un langage L ✓ ⌃⇤ est propre si " 2 / L. Une grammaire G = (⌃, V, P, S) est en forme normale
1. quadratique si P ✓ V ⇥ (V [ ⌃)2
Lemme :
2. de Chomsky si P ✓ {(S, ")} [ (V ⇥ (V 2 [ ⌃)) et si (S, ") 2 P alors S
Soit G = (⌃, V, P, S) une grammaire. n’apparaı̂t dans aucun membre droit.
On peut calculer l’ensemble des variables x telles que " 2 LG (x) O(|G|).
On peut construire une grammaire équivalente sans "-règle autre que S ! " et dans Proposition :
ce cas S n’apparaı̂t dans aucun membre droit O(|G|).
Soit G = (⌃, V, P, S) une grammaire.
On peut construire une grammaire équivalente en FN quadratique O(|G|).
Proposition :
On peut construire une grammaire équivalente en FN de Chomsky O(|G|2 ).
Soit G = (⌃, V, P, S) une grammaire.
On peut construire une grammaire propre G0 qui engendre LG (S) \ {"} O(|G|2 ). Remarques :
Remarque : la réduction d’une grammaire propre est une grammaire propre. 1. La réduction d’une grammaire en FNC est encore en FNC.
Corollaire :
On peut décider si un mot u 2 ⌃⇤ est engendré par une grammaire G.
105/197 106/197
107/197 108/197
Forme normale de Greibach Forme normale de Greibach
Preuve
Définition :
Soit G = (⌃, V, P ) une grammaire⇢ avec V = {x1 , . . . , xn }.
La grammaire G = (⌃, V, P ) est en ↵i,j = xi 1 P (xj ) ✓ (⌃ [ V )⇤
FNG (forme normale de Greibach) si P ✓ V ⇥ ⌃V ⇤ Pour i, j 2 {1, . . . , n} on pose
j = PP (xj ) \ (⌃ · (⌃ [ V )⇤ [ {"})
FNPG (presque Greibach) si P ✓ V ⇥ ⌃(V [ ⌃)⇤ de sorte que les règles de G s’écrivent xj ! i xi ↵i,j + j pour 1 j n.
FNGQ (Greibach quadratique) si P ✓ V ⇥ (⌃ [ ⌃V [ ⌃V 2 )
On peut écrire P vectoriellement : X ! XA + B
avec X = (x1 , . . . , xn ), B = ( 1 , . . . , n ) et A = (↵i,j )1i,jn .
Remarque : on passe trivialement d’une FNPG(Q) à une FNG(Q).
On définit G0 = (⌃, V 0 , P 0 ) par V 0 = V ] {yi,j | 1 i, j n} et
Théorème : P
X ! BY + B xj ! Pk k yk,j + j
P0 : i.e.
Soit G = (⌃, V, P ) une grammaire propre. Y ! AY + A yi,j ! k ↵i,k yk,j + ↵i,j
On peut construire G0 = (⌃, V 0 , P 0 ) en FNG équivalente à G,
i.e., V ✓ V 0 et LG (x) = LG0 (x) pour tout x 2 V . avec Y = (yi,j )1i,jn .
109/197 110/197
111/197 112/197
Équations algébriques Équations algébriques
Définition :
Théorème : Existence de solutions Un système d’équations (⌃, V, P ) est
Tout système (⌃, V, P ) d’équations algébriques admet une plus petite solution : I propre si P \ (V [ {"}) = ; pour tout i
i
G n I strict si Pi ✓ {"} [ (⌃ [ V )⇤ ⌃(⌃ [ V )⇤ pour tout i
L= L
n 0 Le système est faiblement propre (resp. strict) s’il existe k > 0 tel que X = P k (X)
est propre (resp. strict).
0 n+1 n
avec L = (;, . . . , ;) et L = P (L ).
Théorème : Unicité
Exercice : Grammaire et équations algébriques Tout système (⌃, V, P ) d’équations algébriques faiblement strict ou faiblement pro-
Soit G = (⌃, V, Q) une grammaire avec V = {X1 , . . . , Xn }. pre admet une solution unique.
Le système d’équations associé est (⌃, V, P ) où Pi = {↵ 2 (⌃[V )⇤ | (Xi , ↵) 2 Q}.
Exemple :
Montrer que (LG (X1 ), . . . , LG (Xn )) est la plus petite solution du système
D1⇤ est l’unique solution de X = aXbX + ".
d’équations X = P (X).
L est l’unique solution de X = aXX + b.
On en déduit L = D1⇤ b.
113/197 114/197
Analyse syntaxique
Automates à pile Automates à pile
Définition : A = (Q, ⌃, Z, T, q0 z0 , F ) où Exemples :
I Q ensemble fini d’états I L1 = {an bn cp | n, p > 0} et L2 = {an bp cp | n, p > 0}
I ⌃ alphabet d’entrée I L = L1 [ L2 (non déterministe)
I Z alphabet de pile
I T ✓ QZ ⇥ (⌃ [ {"}) ⇥ QZ ⇤ ensemble fini de transitions Exercices :
I q0 z0 2 QZ configuration initiale 1. Montrer que le langage {ww̃ | w 2 ⌃⇤ } et son complémentaire peuvent être
acceptés par un automate à pile.
I F ✓ Q acceptation par état final.
2. Montrer que le complémentaire du langage {ww | w 2 ⌃⇤ } peut être accepté
De plus, A est temps-réel s’il n’a pas d’"-transition. par un automate à pile.
Définition : Système de transitions (infini) associé 3. Soit A = (Q, ⌃, Z, T, q0 z0 , F ) un automate à pile. Montrer qu’on peut
construire un automate à pile équivalent A0 tel que
I T = (QZ ⇤ , T 0 , q0 z0 , F Z ⇤ ) T 0 ✓ Q0 Z ⇥ (⌃ [ {"}) ⇥ Q0 Z 2 .
I Une configuration de A est un état ph 2 QZ ⇤ de T 4. Soit A un automate à pile. Montrer qu’on peut construire un automate à pile
a
I Transitions de T : T 0 = {pzh ! qgh | (pz, a, qg) 2 T }. équivalent A0 tel que les mouvements de la pile sont uniquement du type push
I
w
L(A) = {w 2 ⌃⇤ | 9 q0 z0 ! qh 2 F Z ⇤ dans T }. ou pop.
117/197 118/197
Corollaire :
Tous les modes d’acceptation ci-dessus sont équivalents.
121/197 122/197
C(pg) = {qh 2 QZ ⇤ | 9 pg !
+ qh dans T }
Lemme : Clôture
Si L ✓ ⇤ est un langage rationnel alors Clot(L) ✓ ⇤ aussi.
l’ensemble des configurations accessibles à partir de pg. De plus, on peut e↵ectivement construire un automate pour Clot(L) à partir d’un
On peut e↵ectivement construire un automate fini B qui reconnaı̂t C(pg). automate pour L.
a +
Corollaire : Décidabilité Soit K = {qhxp | 9 px ! qh 2 T } ✓ , langage fini donc rationnel.
Soit A = (Q, ⌃, Z, T, q0 z0 , F ) un automate à pile. Lemme :
On peut décider si L(A) = ;.
Soit n 0,
n red
il existe un calcul pg !
n qh dans T ssi il existe w 2 K tel que wpg 2n! qh
Exemples :
1. Le langage {an ban | n 0} peut être accepté par pile vide par un automate
D+TR+S. Lemme : Itération
n p n n p p
2. Le langage {a b ca | n, p > 0} [ {a b db | n, p > 0} peut être accepté par Soit L ✓ ⌃⇤ un langage déterministe. Il existe un entier N 2 N tel que tout mot
pile vide par un automate D. w 2 L contenant au moins N lettres distinguées se factorise en w = ↵u v avec
1. 8p 0 : w = ↵up v p 2 L(A),
Exercices : 2. u v contient moins de N lettres distinguées,
1. Montrer qu’un langage L est déterministe et préfixe (L \ L⌃+ = ;) ssi il 3. soit ↵, u, soit , v, contiennent des lettres distiguées,
existe un automate déterministe qui accepte L par pile vide. 0 ⇤
4. pour tout 2⌃ ,
2. Montrer que pour les automates à pile déterministes, l’acceptation par pile
0 0
vide est équivalente à l’acceptation par pile vide ET état final. 9p : ↵up v p 2L =) 8p : ↵up v p 2L
Exercice :
Montrer que Dn⇤ peut être accepté par sommet de pile par un automate D+TR+S.
127/197 128/197
Langages déterministes Complémentaire
Proposition : Décidabilité et indécidabilité
On ne peut pas décider si un langage algébrique est déterministe.
Soient L, L0 deux langages déterministes et R un langage rationnel.
Théorème : Les déterministes sont fermés par complémentaire.
Soit A = (Q, ⌃, Z, T, q0 z0 , F ) un automate à pile déterministe, on peut e↵ective-
Les problèmes suivants sont décidables : ment construire un automate à pile déterministe A0 qui reconnaı̂t ⌃⇤ \ L(A).
I L=R?
I R✓L?
Il y a deux difficultés principales :
I L est-il rationnel ?
1. Un automate déterministe peut se bloquer (deadlock) ou entrer dans un
I L = L0 ?
"-calcul infini (livelock). Dans ce cas il y a des mots qui n’admettent aucun
Les problèmes suivants sont indécidables : calcul dans l’automate.
I L \ L0 = ; ? 2. Même avec un automate déterministe, un mot peut avoir plusieurs calculs
I L ✓ L0 ? ("-transitions à la fin) certains réussis et d’autres non.
I L \ L0 est-il algébrique ?
I L \ L0 est-il déterministe ?
I L [ L0 est-il déterministe ?
129/197 130/197
Blocage Blocage
Proposition : Suppression des blocages
Définition : Blocage
Soit A = (Q, ⌃, Z, T, q0 z0 , F ) un automate à pile déterministe, on peut ef-
Un automate à pile A = (Q, ⌃, Z, T, q0 z0 ) est sans blocage si pour toute configu-
" a fectivement construire un automate à pile déterministe sans blocage A0 =
ration accessible p↵ et pour toute lettre a 2 ⌃ il existe un calcul p↵ !
⇤ !. (Q0 , ⌃, Z 0 , T 0 , q00 z00 , F 0 ) qui reconnaı̂t le même langage.
Proposition : Critère d’absence de blocage Preuve
Un automate déterministe est sans blocage si et seulement si pour toute configura- Q0 = Q ] {q00 , d, f }, F 0 = F ] {f }, Z 0 = Z ] {?}, z00 = ? et
tion accessible p↵ on a pour p 2 Q, a 2 ⌃ et x 2 Z
1. ↵ 6= ", et donc on peut écrire ↵ = x avec x 2 Z, "
1. q00 ? ! q0 z0 ?,
" a
2. px ! ou 8a 2 ⌃, px !, a a
"
2. Si px ! q↵ 2 T alors px ! q↵ 2 T 0 ,
3. px 6 !
! . a " a
3. Si px 6 ! et px 6! dans A alors px ! dx 2 T 0 ,
De plus, ce critère est décidable. " " 0 "
4. Si px 6 !
! dans A et px ! q↵ 2 T alors px ! q↵ 2 T ,
" " 0 "
Remarque : 5. Si px !
! dans A et 9 px !
⇤ q↵ avec q 2 F alors px ! f x 2 T ,
" " "
Si A est sans blocage alors chaque mot w 2 ⌃⇤ a un unique calcul maximal (et fini) 6. Si px !
! dans A et 8 px !
⇤ / F alors px ! dx 2 T 0 ,
q↵ on a q 2
" " a a a
q0 z0 w⇤! p↵ 6! dans A (avec ↵ 6= "). 7. p? ! d?, d? ! d?, dx ! dx et f x ! dx.
Cette construction est e↵ective.
131/197 132/197
Complémentaire Langages déterministes
Proposition :
Exercice :
Soit A = (Q, ⌃, Z, T, q0 z0 , F ) un automate à pile déterministe, on peut e↵ective-
Soit A = (Q, ⌃, Z, T, q0 z0 , K) un automate à pile déterministe avec acceptation
ment construire un automate à pile déterministe A0 qui reconnaı̂t ⌃⇤ \ L(A).
généralisée par le langage rationnel K ✓ QZ ⇤ .
Montrer qu’on peut e↵ectivement construire un automate à pile déterministe
Proposition : équivalent reconnaissant par état final.
Soit A = (Q, ⌃, Z, T, q0 z0 , F ) un automate à pile déterministe, on peut e↵ective-
ment construire un automate à pile déterministe équivalent A0 tel qu’on ne puisse Exercice :
pas faire d’"-transition à partir d’un état final de A0 . Soit A un automate à pile déterministe. Montrer qu’on peut e↵ectivement con-
struire un automate à pile déterministe qui reconnaı̂t le même langage et dont les
Exercice : "
"-transitions sont uniquement e↵açantes : px ! q.
Montrer que tout langage déterministe est non ambigu.
133/197 134/197
Plan Bibliographie
Introduction
Langages reconnaissables
Fonctions séquentielles
Analyse syntaxique Analyse syntaxique
Buts :
I Savoir si un programme est syntaxiquement correct.
Rappels : le problème du mot est décidable
I Construire l’arbre de dérivation pour piloter la génération du code.
I Programmation dynamique : O(|w|3 ).
Ce n’est pas assez efficace.
Rappels : I en lisant le mot si on a un automate à pile déterministe complet.
⇤
O(|w|) si l’automate est temps réel ou si les "-transitions ne font que dépiler.
I Un programme est un mot w 2 ⌃ (⌃ est l’alphabet ASCII). Mais la grammaire qui définit la syntaxe du langage de programmation peut
L’ensemble des programmes syntaxiquement corrects forme un langage être non déterministe ou ambiguë.
L ✓ ⌃⇤ .
Ce langage est algébrique : la syntaxe du langage de programmation est Exercice :
définie par une grammaire G = (⌃, V, P, S).
+
I Pour tester si un programme w est syntaxiquement correct, il faut résoudre le Si la grammaire n’est pas récursive à gauche (x ! 6 x↵), on peut construire un
problème du mot : est-ce que w 2 LG (S) ? analyseur récursif avec backtracking. (Cet analyseur n’est pas efficace.)
I L’arbre de dérivation est donné par la suite des règles utilisées lors d’une
dérivation gauche (ou droite).
137/197 138/197
Exemple :
Calculer Follow1 (x) pour chaque variable x de la grammaire G02 .
147/197 148/197
Calcul de Followk Fortement LL
Définition : Fortement LL(k)
Une grammaire G = (⌃, V, P, S) est fortement LL(k) si pour toutes règles x ! ↵
Définition : Algorithme de calcul pour Followk et x ! avec ↵ 6= , on a
Pour m 0 et x 2 V , on définit Ym (x) par :
Firstk (↵Followk (x)) \ Firstk ( Followk (x)) = ;
I Y0 (S) = {"} et Y0 (x) = ; si x 6= S
[
I Ym+1 (x) = Ym (x) [ Firstk ( Ym (y)) Proposition :
y!↵x 2P
Si une grammaire G est fortement LL(k) alors elle est LL(k).
Proposition : Point fixe Exemple :
1. Ym (x) ✓ Ym+1 (x)
1. La grammaire G1 est fortement LL(2).
2. Ym (x) ✓ Followk (x)
2. La grammaire G02 est fortement LL(1).
m
3. Si S ! x alors Firstk ( ) ✓ Ym (x). ⇢
S S ! axaa | bxba
3. La grammaire G3 =
4. Followk (x) = m 0 Ym (x) x ! b|"
Ceci fournit donc un algorithme pour calculer Followk (↵). est LL(2) mais pas fortement LL(2).
Proposition :
Une grammaire est LL(1) si et seulement si elle est fortement LL(1).
149/197 150/197
La grammaire G2 est non ambiguë : lors d’un conflit, si on fait le mauvais choix,
on ne peut pas prolonger en un calcul acceptant.
153/197 154/197
avec Firstk (w) = Firstk (av). Une grammaire n’a pas de k-conflit (shift/reduce ou reduce/reduce) si et seulement
0 0 0 si 9
I Un k-conflit reduce/reduce est un tuple (x, ↵, w, x , ↵ , w ) tel qu’il existe ⇤ 1 >
S !r xw !r ↵w =
, 0 2 (⌃ [ V )⇤ et deux calculs dans B : ⇤ 1
S !r !r ↵w 0 =) = xw0
" " w0
>
;
↵ ! x w⇤! S et 0 0
↵ ! 0 0
x ⇤! S Firstk (w) = Firstk (w0 )
reduce reduce
0 0
avec ↵ = ↵ , Firstk (w) = Firstk (w0 ) et (x, ↵) 6= (x0 , ↵0 ).
155/197 156/197
Grammaires augmentées Grammaires LR(k)
Remarque :
Pour une grammaire LR(0) il faut aussi pouvoir décider si on doit s’arrêter sans
regarder s’il reste des lettres à lire. Remarques :
C’est le cas pour la grammaire G1 : on s’arrête si la pile est exactement S.
1. Toute grammaire LR(k) engendre un langage déterministe.
Ce n’est pas le cas pour la grammaire S ! Sa | a qui n’a pourtant aucun 0-conflit.
Formellement, cette grammaire doit donc être LR(1) et pas LR(0). 2. Tout langage déterministe peut être engendré par une grammaire LR(1).
3. La hiérarchie des grammaires LR(k) est stricte :
Définition : Grammaire augmentée Pour tout k > 0 il existe une grammaire LR(k) qui n’est pas LR(k 1).
Soit G = (⌃, V, P, S) une grammaire. 4. Étant donnée une grammaire G, on ne peut pas décider s’il existe une entier k
La grammaire augmentée de G est G0 = (⌃, V ] {S 0 }, P ] {S 0 ! S}, S 0 ). tel que G soit LR(k).
5. Toute grammaire LL(k) est une grammaire LR(k).
Définition : Grammaire LR(k) 6. On peut décider si une grammaire LR(k) est aussi LL(k).
0
Une grammaire G est LR(k) si sa grammaire augmentée G n’a aucun k-conflit. 7. Étant donnée une grammaire LR(k) G, on ne peut pas décider s’il existe n tel
que G soit LL(n).
Remarque :
+
Soit G une grammaire sans dérivation du type S ! S et k > 0.
La grammaire G n’a aucun k-conflit si et seulement si G0 n’a aucun k-conflit.
157/197 158/197
S a S b
0|ε 1|S 2 | Sa 3 | SaS 4 | SaSb
a
159/197 160/197
Analyseur LR(k) Analyseur SLR (Simple LR)
Définition : 0-item
Remarques : I Un 0-item est une règle pointée : A ! ↵1 .↵2 avec A ! ↵1 ↵2 2 P .
I Pour éviter de calculer goto(q0 , ) à chaque transition, on mémorise les états I Le 0-item A ! ↵1 .↵2 est valide dans le contexte si = ↵1
intermédiaires sur la pile : et s’il existe dans G une dérivation droite :
Si = 1 · · · k alors la pile est en fait le calcul de l’automate :
⇤
S 0 !r Aw
q0 1 q1 · · · k qk
ou de façon équivalente, s’il existe dans l’automate shift/reduce B un calcul
avec qi+1 = goto(qi , i+1 ).
" w
Initialement, la pile est donc q0 . ↵2 = ↵ 1 ↵ 2 ! A ! S0
reduce ⇤
I Lors d’un shift(a) on empile a puis goto(qk , a)
I Lors d’un reduceA!↵ on dépile 2|↵| symboles et on empile A puis I On note V0 ( ) l’ensemble des 0-items valides pour .
goto(qk |↵| , A).
I Lors d’un reduceA!↵ , ↵ sera toujours un suffixe de . Remarque :
I Les symboles 1, . . . , k sont en fait inutiles, il suffit d’avoir la pile des états I Si A ! ↵1 .a↵2 2 V0 ( ) alors l’action shifta est utile dans le contexte .
q0 , . . . , q k . I Si A ! ↵. 2 V0 ( ) alors l’action reduceA!↵ est utile dans le contexte .
L’automate des contextes C0 calcule les 0-items valides.
161/197 162/197
163/197 164/197
Table des actions Analyseur SLR
Exemple : Analyseur SLR pour G4
Définition : Table des actions de l’analyseur SLR A0 0 : S0 ! S 1 : S ! SaSb 2: S!"
S a S b
0|ε 1|S 2 | Sa 3 | SaS 4 | SaSb
a
165/197 166/197
Proposition : Correction
Soit A0 l’analyseur SLR de G = (⌃, V, P, S 0 ). On a L(A0 ) = LG (S 0 ).
Exercice :
Calculer l’automate des contextes et la table des actions pour la grammaire G2 : Preuve
Soit B l’analyseur shift/reduce général de la grammaire G.
0 : E0 ! E 1: E !E+T 2: E!T
Tout calcul de A0 est un calcul de B : L(A0 ) ✓ L(B) = LG (S 0 ).
3: T !T ⇤F 4: T !F w
Tout calcul acceptant " ! S 0 de B est un calcul de A0 : L(A0 ) ◆ L(B) = LG (S 0 ).
5 : F ! (E) 6 : F ! id ⇤
167/197 168/197
Analyseur SLR Grammaires et génération du code
Exemple : Analyseur SLR pour G5 Remarque : Grammaires équivalentes
0 La grammaire G5
0: S !S 1 : S ! L := R 2: S!R
3 : L ! ⇤R 4 : L ! id 5: R!L 0 : S0 ! S 1 : S ! L := R 2: S!R
0
Follow1 (S ) = Follow1 (S) = {"} Follow1 (R) = Follow1 (L) = {", :=} 3 : L ! ⇤R 4 : L ! id 5: R!L
4 conflits shift/reduce que l’on résout grâce aux règles de priorité et d’associativité.
171/197 172/197
Insuffisance de l’analyse SLR Analyseur LR(1)
Définition : 1-item
I 1-item : [A ! ↵1 .↵2 , u] avec A ! ↵1 ↵2 2 P et u 2 ⌃1 .
I Le 1-item [A ! ↵1 .↵2 , u] est valide dans le contexte si = ↵1
Remarque : et s’il existe dans G une dérivation droite :
Supposons que reduceA!↵ 2 action(V0 ( ), a), i.e., ⇤
S 0 !r Aw avec u = First1 (w)
A ! ↵. 2 V0 ( ) et a 2 Follow1 (A)
ou de façon équivalente, s’il existe dans l’automate shift/reduce B un calcul
0 ⇤
Mais que pour tout S !r Aw on ait a 2 / First1 (w) alors, ↵2 = ↵ 1 ↵ 2
" w
! A ! S0 avec u = First1 (w)
reduce ⇤
l’action reduceA!↵ est inutile pour (V0 ( ), a).
cf. preuve de la proposition Correction. I On note V1 ( ) l’ensemble des 1-items valides pour .
Ceci est dû à l’imprécision de Follow1 (A). Remarque :
I Si [A ! ↵1 .↵2 , u] 2 V1 ( ) alors A ! ↵1 .↵2 2 V0 ( ) et u 2 Follow1 (A).
I Si A ! ↵1 .↵2 2 V0 ( ) alors il existe u 2 ⌃1 tel que [A ! ↵1 .↵2 , u] 2 V1 ( ).
I Si [A ! ↵., u] 2 V1 ( ) alors l’action reduceA!↵ est utile dans une
configuration ( , w) avec u = First1 (w).
173/197 174/197
179/197 180/197
Plan Bibliographie
Introduction
Langages reconnaissables
8 Fonctions séquentielles
Définitions et exemples
Composition
Résiduels et normalisation 181/197 182/197
Minimisation
183/197 184/197
Automates séquentiels fonctions séquentielles
Définition : Automates séquentiels
A = (Q, A, B, q0 , , ', m, ⇢) où
I A = (Q, A, B, q0 , , ') est un automate séquentiel pur,
Définition : fonctions séquentielles
I m 2 B ⇤ est le préfixe initial,
Une fonction f : A⇤ ! B ⇤ est séquentielle s’il existe un automate séquentiel A qui
I ⇢ : Q ! B ⇤ est la fonction partielle finale.
la réalise : f = [[A]].
On appelle état final un état dans dom(⇢).
La sémantique de A est la fonction partielle [[A]] : A⇤ ! B ⇤ définie par Lemme :
I [[A]](u) = m'(q0 , u)⇢( (q0 , u)). Une fonction séquentielle peut être réalisée par un automate séquentiel ayant un
préfixe initial vide (m = ").
Exemples :
1. La fonction f : A⇤ ! A⇤ définie par f (u) = u(ab) 1
. Proposition :
2. Addition de deux entiers écrits en binaire en commençant par le bit de poids Une fonction séquentielle peut être réalisée par un automate émondé, i.e., tel que
faible. 8p 2 Q, 9u, v 2 A⇤ tels que (q0 , u) = p et (p, v) 2 dom(⇢).
3. La multiplication par 3 d’un entier écrit en binaire en commençant par le bit
de poids faible.
4. Le décodage par un code à délai de déchi↵rage borné.
Ces fonctions sont-elles séquentielles pures ?
185/197 186/197
Exemple : Multiplication par 5 I ⇢00 ((p, p0 )) = '0 (p0 , ⇢(p))⇢0 ( 0 (p0 , ⇢(p))).
2
Dans cet exemple, A = C = {0, 1}, B = {0, 1} et les mots représentent des entiers
codés en binaire en commençant par le bit de poids faible. Lemme : Extension à A⇤
On considère les fonctions séquentielles f : A⇤ ! B ⇤ et g : B ⇤ ! C ⇤ définies par Pour tout u 2 A⇤ , on a
f (n) = (n, 4n), i.e., f (u) = (u00, 00u) et g(n, m) = n + m. I 00
((p, p0 ), u) = ( (p, u), 0 (p0 , '(p, u))),
La fonction g f code la multiplication par 5. I '00 ((p, p0 ), u) = '0 (p0 , '(p, u)),
Construire les automates séquentiels réalisant f et g.
En déduire un automate séquentiel pour g f .
Preuve (Composition)
1. Si f et g sont réalisées par A et A0 alors g f est réalisée par A0 A.
2. Si A et A0 sont purs alors A0 A est pur.
187/197 188/197
Fonct. séquentielles et lang. rationnels Plus grand préfixe commun
Définition :
Définition : Fonction caractéristique I Tout sous ensemble ; = 6 X ✓ B ⇤ admet un plus grand préfixe commun,
⇤
Soit L ✓ A un langage. La fonction caractéristique de L est la fonction totale i.e., une borne inférieure pour l’ordre
V préfixe.
1L : A⇤ ! {0, 1} définie par 1L (u) = 1 si et seulement si u 2 L. Cette borne inférieure est notée X.
I que ; n’admet pas de plus grand préfixe commun.
Noter V
Théorème : Donc ; n’est pas défini.
Un langage L ✓ A⇤ est rationnel si et seulement si sa fonction caractéristique 1L
est séquentielle. Remarque :
1. Soit u 2 B ⇤ et ; =
6 X ✓ B⇤.
Corollaire : Image inverse V V
I u · XV= u · XV
1 1 V
Soient f : A⇤ ! B ⇤ une fonction séquentielle. I si u X alors u ·X =u · X
Si L ✓ B ⇤ est rationnel alors f 1 (L) est rationnel. 2. Soit f : A ! B une fonction partielle, on a f (A⇤ ) = {f (u) | u 2 dom(f )}.
⇤ ⇤
V
Théorème : Image directe Donc f (A⇤ ) est défini si dom(f ) 6= ;.
Résiduels Normalisation
Définition : Résiduels
Soit f : A⇤ ! B ⇤ une fonction partielle et soit u 2 A⇤ . Exemple :
Le résiduel fu : A⇤ ! B ⇤ est défini par Donner un automate séquentiel réalisant la fonction f : A⇤ ! A⇤ définie par
1
I dom(fu ) = u dom(f ) et f (a2n b) = (ab)n a.
V
I fu (v) = ( f (uA⇤ )) 1 f (uv) pour uv 2 dom(f ). Cet automate devra sortir les lettres du résultat le plus rapidement possible.
V
f (uA⇤ ) représente tout ce qu’on peut écrire si on sait que la donnée commence Définition : Automate normalisé
par u. Le résiduel fu (v) est donc ce qui reste à écrire si la donnée est uv.
Intuitivement, un automate est normalisé s’il écrit son résultat au plus tôt.
Exemple : Soit A = (Q, A, B, q0 , , ', m, ⇢) un automate séquentiel et p 2 Q.
V
Calculer les résiduels de la fonction f : A⇤ ! A⇤ définie par f (w) = w(ab) 1
. On définit Ap = (Q, A, B, p, , ', ", ⇢) et mp = [[Ap ]](A⇤ ) si [[Ap ]](A⇤ ) 6= ;.
L’automate A est normalisé si pour tout p 2 Q, [[Ap ]](A⇤ ) = ; ou mp = ".
Lemme : Composition
Exercice : E↵ectivité
Soient u, v 2 A⇤ . On a fuv = (fu )v , i.e.,V
dom(fuv ) = v 1 dom(fu ) et fuv (w) = ( fu (vA⇤ )) 1
fu (vw). Étant donné un automate séquentiel A, on peut calculer les mp en temps quadratique
(cf. DM1 2006).
Théorème : Caractérisation par résiduels
f : A⇤ ! B ⇤ est séquentielle si et seulement si elle a un nombre fini de résiduels.
191/197 192/197
Normalisation Séquentielle et séquentielle pure
Proposition : Normalisation
Définition :
Tout automate séquentiel est équivalent à un automate séquentiel normalisé, qui
Une fonction partielle f : A⇤ ! B ⇤ préserve les préfixes si
peut être choisi émondé ou complet.
I son domaine est préfixiel : u v et v 2 dom(f ) implique u 2 dom(f ),
Preuve I et elle est croissante : u v et v 2 dom(f ) implique f (u) f (v).
Soit A = (Q, A, B, q0 , , ', m, ⇢) un automate séquentiel émondé
(donc mp est bien défini pour tous p 2 Q).
Proposition :
On définit A0 = (Q, A, B, q0 , , '0 , m0 , ⇢0 ) par : 1. Une fonction séquentielle pure préserve les préfixes.
I m0 = mm
V 2. Soit f : A⇤ ! B ⇤ une fonction séquentielle. Si f (") = " et f préserve les
q0 = [[A]](A⇤ ),
préfixes alors f est séquentielle pure.
I '0 (p, a) = mp 1 ('(p, a)m (p,a) ) si (p, a) 2 dom(') = dom( )
I ⇢0 (p) = mp 1 ⇢(p) si p 2 dom(⇢) Preuve
0 0
On vérifie que A est normalisé et [[A ]] = [[A]]. L’automate normalisé émondé d’une fonction séquentielle f qui préserve les préfixes
et telle que f (") = " est un automate séquentiel pur.
Pour obtenir un automate complet, il suffit d’ajouter un état puits.
193/197 194/197
Exemple :
Calculer l’automate des résiduels de la fonction multiplication par 5 où les entiers
sont codés en binaire en commençant avec le bit de poids faible.
195/197 196/197
Minimisation
Théorème : Automate minimal
Soit f : A⇤ ! B ⇤ une fonction séquentielle.
L’automate des résiduels de f , noté Rf , est minimal parmi les automates normalisés
et complets qui réalisent f .
Exemple :
Minimiser l’automate naturel de f : A⇤ ! A⇤ définie par f (w) = w(ab) 1
.
197/197