Skip to main content

Automates finis et application - TD4

Exercice 1

Lemme d'Arden : A.BA^\ast.B est une solution de X=A.XUBX = A.X U B (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 X2X_2 par sa valeur dans X1X_1 (on se permet de confondre les singletons avec l'élement par concision) : X1=b.X1U(b.A.X0U{a,b}.X1)UϵX1 = b.X_1 U (b.A.X_0 U \{a, b\}.X_1) U \epsilon X1={b,ba,bb}.X1Uba.X0UϵX1 = \{b, ba, bb\}.X_1 U ba.X_0 U \epsilon

D'après le Lemme d'Arden, on a : X1={b,ba,bb}.(ba.X0Uϵ)X_1 = \{b, ba, bb\}^\ast . (ba.X_0 U \epsilon)

On remplace dans X0 : X0=(aUb.{b,ba,bb}.ba).X0Ub.{b,ba,bb}UϵX_0 = (a U b.\{b, ba, bb\}^\ast .ba).X_0 U b.\{b, ba, bb\}^\ast U \epsilon

Encore une fois, avec le lemme : X0=(aUb.{b,ba,bb}.ba).(b.b,ba,bbUϵ)X0 = (a U b.\{b, ba, bb\}^\ast.ba)^\ast . (b.{b, ba, bb}* U \epsilon)

Et on termine en remplaçant X0X_0 et X1X_1 dans X2X_2.

  • On veut montrer que Σ\Sigma^\ast est toujours solution si AA contient le mot vide.

Si A contient eps, alors A.Σ=ΣA.Σ* = Σ* de plus, BB est inclus dans ΣΣ* donc A.ΣUB=ΣA.Σ* U B = Σ*

donc ΣΣ* est bien solution de l'équation X=A.XUBX = A.X U B

  • 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 A.BA*.B est une solution de X=A.XUBX = A.X U B

A.B=(epsUA.A).B=BUA.A.BA*.B = (eps U A.A*).B = B U A.A*.B or le produit de langages est associatif, donc A.B=A(A.BUB)A*.B = A(A*.B U B)

  • Dans la cas où AA ne contient pas le mot vide Soit SS une solution, et ww un mot de SS Supposons que ww est le plus court possible tel que ww n'est pas dans A.BA*.B ww est dans S=A.SUBS = A.S U B donc ww est soit :
    • dans BB (impossible)
    • soit dans ASAS

donc w=u.vw = u.v avec uu dans AA et vv dans SvS v est aussi dans A.BA*.B (car v<w|v| < |w|) donc ww est dans A.A.BA.A*.B, donc dans A.BA*.B

Supposons maintenant que SS est une solution et ww dans A.BA*.B qui n'est pas dans SS, de longueur minimale

On a toujours que A.B=A.ABUBA*.B = A.A*B U B donc ww appartient à l'un des deux ensembles Or BB est inclus dans SS, donc ww est dans A.A.BA.A*.B Ainsi, w=x.y.zw = x.y.z avec xx non-vide, yy dans AA* et zz dans BB

yzyz est dans A.BA*.B, donc dans SS or S=ASUBS = AS U B, donc x.yzx.yz est dans SS -> 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 SaSabTabS \Rightarrow aS \Rightarrow abT \Rightarrow ab

     S
/ \
a S
/ \
b T
|
eps

SS+SxS \rightarrow S + S | x

On peut avoir deux suites de dérivations différentes, mais le même arbre

  1. SS+Sx+Sx+xS \Rightarrow S + S \Rightarrow x + S \Rightarrow x + x
  2. SS+SS+xx+xS \Rightarrow S + S \Rightarrow S + x \Rightarrow x + x
       S
/ | \
S + S
| |
x x

SS+SS+S+SS \Rightarrow S+S \Rightarrow S+S+S \Rightarrow Dans ce cas, on peut choisir de remplacer le premier ou le deuxième SS par S+SS + S

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)

  1. SA1BA1B0A1B1BB0B1BepsS \rightarrow A1B A1B \rightarrow 0A1B | 1B B \rightarrow 0B | 1B | eps

SAA0A1BB0B1BepsS \rightarrow A' A' \rightarrow 0A' | 1B B \rightarrow 0B | 1B | eps

Finalement en supprimant la variable inutile S0S1BB0B1BepsS \rightarrow 0S | 1B \\ B \rightarrow 0B | 1B | eps

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

  1. {an.bn}:SaSbeps\{a^n.b^n\} : S \rightarrow aSb | eps

  2. {an.bm,m<=n}:SaSaSbeps\{a^n.b^m, m <= n\} : S \rightarrow aS | aSb| eps

D'ailleurs, cette grammaire est ambigüe

SaSaaSbaabS \Rightarrow aS \Rightarrow aaSb \Rightarrow aab mais aussi SaSbaaSbaabS \Rightarrow aSb \Rightarrow aaSb \Rightarrow aab qui ont deux arbres différents donc on a deux façon différentes de construire aabaab

  1. w.wR:SaSabSbeps{w.w^R} : S \rightarrow aSa | bSb | eps qui n'est pas ambigüe

  2. Les mots de Dyck : SSS(S)[S]SϵS \rightarrow SS | (S) | [S] | {S} | \epsilon qui est ambigüe

  3. variante avec les parenthèses dans l'ordre : 1:,2:(),3:[] 1: {}, 2: (), 3: []

SSSTϵTTT(U)ϵUUU[]ϵS \rightarrow SS | {T} | \epsilon \\ T \rightarrow TT | (U) | \epsilon \\ U \rightarrow UU | [] | \epsilon

Exercice 5

SS+SSSS01S \rightarrow S + S | S * S \\ S \rightarrow 0 | 1

  1. Cette grammaire est hors-contexte

  2. 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

  1. On peut se baser sur l'expression régulière (0,1+,x)0,1({0,1}{+,x})*{0,1}, on trouve S0+S1+S0S1S01S \rightarrow 0+S | 1+S | 0*S | 1*S | 0 | 1

  2. on ajoute la règle S(S)S \rightarrow (S) 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