Université de Montpellier II – DEUG MASS – niveau 1 – période 1 – Informatique – UE1603ME

Correction de l'examen d’Informatique

janvier 2000 - durée 3h


[Entre cochets, sont ajoutés des commentaires. Ces commentaires ne devaient pas obligatoirement figurer sur la copie. Le barême est indiqués. Il fallait bien lire le sujet sans se lancer tête baissée sur la question I]


Question I (sur 8)

I.1. (sur 4)

L12 correspond au langage sur V = {a, b} composé de l’ensemble des mots sur V* qui contiennent le sous-mot " abb ". Une ER de L12 est : (a+b)*abb(a+b)*.

L’EF non déterministe correspondant est A1 :

A1 =

On déterminise A1 par la méthode classique pour obtenir A2 :

A2 =

Ce qui se simplifie en A3 :

A2 =

Par les équations à partir de A2 :

L3 = aL4 + bL3 + epsilon
L4 = aL4 + bL5 + epsilon
L5 = aL4 + bL3 + epsilon

On observe que L5 = L3.
Donc L4 = aL4 + bL3 + epsilon
En résolvant : L4 = a*( bL3 + epsilon)
Donc L3 = a a*(bL3 + epsilon) + bL3 + epsilon
L3 = (a a*b +b)L3 + aa* + epsilon
L3 = a*bL3 + a*
En résolvant : L3 = (a*b)*a* = (a+b)*

I.2. (sur 2)

On peut, toujours par la méthode des équations, en déduire depuis A3 l’ERNA demandée :

L0= bL0 + aL1
L1 = aL1 + bL2
L2 = aL1 + bL3
L3 = (a+b)L3 + epsilon

L3 = (a+b)*
L2 = aL1 + b(a+b)*
L1 = aL1 + baL1 + bb(a+b)*
Donc L1 = (a + ba)L1 + bb(a+b)*
En résolvant : L1 = (a + ba)* bb(a+b)*
Donc L0 = bL0 + a(a + ba)* bb(a+b)*
En résolvant : L0 = b* a(a + ba)* bb(a+b)*

L12 = b* a(a + ba)* bb(a+b)*

I.3. (sur 2)

L1n = b* a(a + ba + bba + bbba+ … bn-1a)* bn (a+b)*

L11 = b*(a)* ab(a+b)*
L12 = b*(a + ba)* abb(a+b)*
L13 = b*(a + ba + bba)* abbb(a+b)*

Question II (sur 8)

II.1. (sur 3)

Grammaire de type 3 (mais pas epsilon libre)

Comme elle est de type 3, on peut donc faire son automate, on y verra sûrement plus clair :

Posons les équations :

LA = (a+b)LA + aLB
LB = bLC
LC = bLD
LD = bLE
LE = (a+b)LE + epsilon + (a+b)LA

LE = (a+b)*(epsilon + (a+b)LA)
LD = b(a+b)*(epsilon + (a+b)LA)
LC = bb(a+b)*(epsilon + (a+b)LA)
LB = bbb(a+b)*(epsilon + (a+b)LA)
LA = (a+b)LA + abbb(a+b)*(epsilon + (a+b)LA)
Soit LA = (a+b + abbb(a+b)*(a+b))LA + abbb(a+b)*
En résolvant : LA = (a+b + abbb(a+b)*(a+b))*abbb(a+b)*

On peut simplifier en remarquant que (a+b) est inclus dans (a+b + abbb(a+b)*(a+b)) donc (a+b)* est inclus dans (a+b + abbb(a+b)*(a+b))*
Or tout est L est inclus dans V* = (a+b)*
Donc (a+b)* = (a+b + abbb(a+b)*(a+b))*

Donc LA = (a+b)*abbb(a+b)*

Donc le langage engendré par G est :
L = (a+b)*abbb(a+b)* = L13

AL =

II.2. (sur 2)

Comme L = L13, on considère maintenant l’automate déterministe correspondant à L13 , soit :

Ce qui donne comme grammaire G’ non-ambigüe (mais pas epsilon libre) :

II.3. (sur 3)

L’automate non déterministe de L = (a+b)*abbb(a+b)* est :

AL =

Cherchons le langage mirroir de L = L13. Pour cela on produit l’automate mirroir (en inversant le sens des transitions - et en échangeant états final et initial - comme décrit dans le support de cours)

Mirroir(AL)=

On obtient l’automate correspondant à l’ER : (a+b)*bbba(a+b)*.

Si on fait l’union des ER de L et de Mirroir(L), on obtient :
L2 = (a+b)*abbb(a+b)* + (a+b)*bbba(a+b)*

Donc L2 = (a+b)*(abbb+bbba)(a+b)*

On peut aussi passer par l’automate union entre AL2 et Mirroir(AL2) :

On trouve la grammaire directement par traduction de l’automate. Ce qui donne comme grammaire G2 (pas epsilon libre) :

Question III (sur 8)

III.1. (sur 3)

Pour L3n avec n = 2, on a l’automate :

Ce qui est exactement l’automate du langage L1n avec n = 2 où a et b ont été échangés.
Si on échange a et b dans l’ER suivante : b* a(a + ba)* bb(a+b)*, on obtient :

a* b(b + ab)* aa(a+b)*

III.2. (sur 3)

Il faut calculer l’intersection entre L1n avec n = 1 et L3n avec n = 1. C’est-à-dire entre a* bb* a(a+b)* et b* aa* b(a+b)*. Ou encore l’intersection entre les deux automates suivants :

L’état 5 est final car 2 et 2’ sont finaux.

Clairement, il s’agit du language dont les mots contiennent à la fois la sous-chaîne " ab " et la sous-chaîne " ba ".

On peut trouver l’expression régulière par la méthode des équations.

L0 = aL1 + bL2
L1 = aL1 + bL3
L2 = bL2 + aL4
L3 = bL3 + aL5
L4 = aL4 + bL5
L5 = (a+b)L5 + epsilon = (a+b)*

Donc L4 = a*b(a+b)* et L3 = b*a(a+b)*
Donc L2 = b*aa*b(a+b)* et L1 = a*b b*a(a+b)*
Donc L0 = aa*bb*a(a+b)* + bb*aa*b(a+b)*
En factorisant L0 = (aa*bb*a+ bb*aa*b)(a+b)*

L41-1 = (aa*bb*a+ bb*aa*b)(a+b)*

Tous les mots donnés en exemple en I sauf " abb " appartiennent à L41-1. " abb " ne contient pas " ba ". Tous les autres contiennent à la fois " ab " et " ba ".

III.3. (sur 2) On peut déduire directement la machine de Turing de l’automate ci-dessus.

Pas de prologue (comme pour toutes les machines de Turing issues d'automates].

Les épilogues : Comme d'habitude - on utilise les états qr pour la situation de réussite et qe pour celle d’échec.
A partir de qr on se placera sur le 0 le plus àdroite si on est pas déjà sur un 0 et on repartira à gauche en effaçant tout jusqu’au premier 0. En se mettra sur la case de départ en se décalant d’un cran à droite et en ecrivant 1 (le mot appartient à L).

Idem pour qe mais on n’écrit rien (ou alors un 0) à la fin.

Epilogue d’échec :

Epilogue de réussite:

Corps du programme :

Fait le 20/01/2000 - Mathieu Lafourcade