Automates finis et application - TD4
Exercice 1
Lemme d'Arden : est une solution de (et si A ne contient pas eps, cette solution est unique)
- En pratique, il faut choisir la variable qui sera éliminée en premier. Ici, on va remplacer par sa valeur dans (on se permet de confondre les singletons avec l'élement par concision) :
D'après le Lemme d'Arden, on a :
On remplace dans X0 :
Encore une fois, avec le lemme :
Et on termine en remplaçant et dans .
- On veut montrer que est toujours solution si contient le mot vide.
Si A contient eps, alors de plus, est inclus dans donc
donc est bien solution de l'équation
-
Pour prouver le lemme, il faut montrer que A*.B est bien une solution puis l'unicité (ce qu'on va faire en montrant qu'elle est la plus petit et la plus grande)
-
Montrons d'abord que est une solution de
or le produit de langages est associatif, donc
- Dans la cas où ne contient pas le mot vide Soit une solution, et
un mot de Supposons que est le plus court possible tel que
n'est pas dans est dans donc est soit :
- dans (impossible)
- soit dans
donc avec dans et dans est aussi dans (car ) donc est dans , donc dans
Supposons maintenant que est une solution et dans qui n'est pas dans , de longueur minimale
On a toujours que donc appartient à l'un des deux ensembles Or est inclus dans , donc est dans Ainsi, avec non-vide, dans et dans
est dans , donc dans or , donc est dans -> contradiction
- On construit l'automate en créant un état par variable + un état final et on crée les transitions pour chaque règle (cf. cours)
Exercice 2
L'intuition naïve qu'on pourrait avoir serait "d'inverser" les résultats de chaque règle. Cependant, cette méthode génère en fait le miroir du langage de la grammaire de départ.
À partir d'une grammaire linéaire droite G, on peut obtenir un automate fini A qui accepte le langage de la grammaire. Ensuite, on calcule l'automate A' qui accepte le langage miroir, ce qui permet d'obtenir une grammaire linéaire droite G'. Enfin, on inverse "naïvement" G' et on obtient une grammaire linéaire gauche G'' de même langage que G. (on peut bien sûr effectuer l'opération inverse)
On peut aussi convertir en automate fini puis inverser les états initiaux et finaux du résultat, ainsi que toutes les transitions. FH: cette transformation correspond au calcul de l'automate miroir dans la solution ci-dessus. C'est une étape de la construction, mais elle ne répond pas totalement à la question
Parenthèse sur un arbre de dérivation pour une grammaire régulière
\begin{align} S &\rightarrow aS | bT \\ T &\rightarrow aT | bS | \epsilon \end{align}
pour une génération
S
/ \
a S
/ \
b T
|
eps
On peut avoir deux suites de dérivations différentes, mais le même arbre
S
/ | \
S + S
| |
x x
Dans ce cas, on peut choisir de remplacer le premier ou le deuxième par
En remplaçant le deuxième, on trouve l'arbre suivant :
S
/ | \
S + S
| / | \
x S + S
| |
x x
Exercice 3
On est en présence d'une grammaire non-linéaire (à cause de la première règle qui mène à A1B avec deux symboles non-terminaux)
Finalement en supprimant la variable inutile
Il faut garder à l'esprit que les grammaire hors-contexte ne sont pas toutes équivalentes à des grammaires linéaires.
Exercice 4
Conversion de langages en grammaires
D'ailleurs, cette grammaire est ambigüe
mais aussi qui ont deux arbres différents donc on a deux façon différentes de construire
-
qui n'est pas ambigüe
-
Les mots de Dyck : qui est ambigüe
-
variante avec les parenthèses dans l'ordre :
Exercice 5
-
Cette grammaire est hors-contexte
-
On exhibe deux arbres différents qui génèrent le même mot cf. la Parenthèse au début de ces notes
Problème : difficulté pour évaluer l'expression (arithmétique) car on ne sait pas quel arbre choisir
-
On peut se baser sur l'expression régulière , on trouve
-
on ajoute la règle Il n'y a pas de grammaire régulière qui décrit ce nouveau langage, car ce n'est pas un langage régulier