1 / 82

Chapitre 2.3 Les limites des grammaires non-contextuelles

Chapitre 2.3 Les limites des grammaires non-contextuelles. Portée des langages non contextuels. Il existe des langages qui ne sont pas non contextuels (on dit qu’ils sont contextuels ou dépendant du contexte).

maura
Télécharger la présentation

Chapitre 2.3 Les limites des grammaires non-contextuelles

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapitre 2.3Les limites des grammaires non-contextuelles

  2. Portée des langages non contextuels • Il existe des langages qui ne sont pas non contextuels (on dit qu’ils sont contextuels ou dépendant du contexte). • Nous avons déjà des outils pour montrer qu’un langage n’est pas régulier (lemme de pompage). • Nous verrons maintenant comment des méthodes semblables peuvent montrer qu’un langage est contextuel.

  3. Remarques • Le Lemme de pompage pour les langages non-contextuels montre comment créer de nouvelles séquences en « pompant » des sous-séquences, i.e. en ajoutant un nombre quelconque de ces sous-séquences. • Important: ne pas confondre avec le lemme de pompage pour les langages réguliers. • Bien comprendre l’utilisation de ces lemmes: servent seulement à montrer qu’un langage n’est pas régulier ou contextuel.

  4. Remarques • L’intuition est semblable à celle du lemme de pompage pour les langages réguliers. On cherche à exploiter la présence d’une boucle dans un calcul donné. • Pour les langages réguliers boucle autour d’un état d’un automate fini. • Pour les langages non-contextuels boucle autour d’un symbole.

  5. Théorème 2.40 • Soit L un langage infini. Si L * est non contextuel, alors il existe un entier p > 0 tel que pour tout mot z  L avec |z|  p il existe s,v,u,w,t * avec z = svuwt et • |vw| ≥ 1 (v ou w ) • |vuw| ≤ p • pour tout iN sviuwit  L

  6. Exemple • Soit la grammaire G = ({A, B, C}, {a, b}, A, R), où R est : A  BC B  a C  BC B  CC C  b C  BB • Nous supposons que G est sous la forme normale de Chomsky ou presque sous la forme normale de Chomsky. Donc, exactement deux non terminaux au maximum du côté droit. • Le langage généré par G est infini. • En effet, toutes les séquences de la forme an+1b, où n  N, appartiennent à L(G).

  7. A  BC B  a B  CC C  b C  BC C  BB Voici la dérivation de an+1b: A   Règle A  BC.  BC   Règle C  BC.  BBC   Règle B  a.  aBC   répéter une ou plusieurs fois.  …  anBC   Règle B  a.  an+1C   Règle C  b.  an+1b

  8. A  BC B  a B  CC C  b C  A C  BB Le côté droit de chaque règle est un symbole terminal ou deux symboles non-terminaux donc la grammaire est sous la forme normale de Chomsky.

  9. Chaque nœud d’un arbre de dérivation a soit 2fils soit un seul fils qui est une feuille. Donc, un arbre de dérivation de profondeur d peut produire une séquence de longueur au plus 2d. Ainsi, l’arbre de l’acétate suivante a une profondeur de 3 et produit une séquence de longueur maximale 8.

  10. A longueur  20 = 1 (profondeur 0) B C longueur  21 = 2 (profondeur 1) C C B B longueur  22 = 4 (profondeur 2) B B B B C C C C longueur  23 = 8 (profondeur 3)

  11. A  BC B  a B  CC C  b C  BC C  BB Soit j = nombre de symboles non terminaux = |V|. Pour notre exemple, j = 3.

  12. Choisissons arbitrairement une séquence z  L telle que |z| > 2j (une telle séquence existe puisque L est infini). Pour notre exemple, |z| > 23 = 8. Prenons la séquence z = abbbbabbabb (on a |z| = 11). N’importe quel arbre de dérivation de z a une profondeur plus grande que j = 3. Il y a donc au moins un chemin, de la racine à une feuille, contenant plus de j symboles non terminaux.

  13. Soit l’arbre de dérivation de z: A (1) (2) B C C C (3) B B B B b C C (4) C C a C C b (5) B C b B B b b a b a C C Le chemin ACBCABa est de profondeur 5 et contient 6 symboles non terminaux. b b

  14. (5) B a Sur ce chemin, considérons le sous-arbre dont la racine est B (3) duquel on enlève le sous-arbre dont la racine est B(5) (on garde la racine). (3) B C C B C b b

  15. La séquence z peut être décomposée de la manière suivante: abbb b a b babb s v u w t Où s est la séquence terminale à gauche du sous-arbre (3) dans l’arbre principal (1); v est la séquence terminale à gauche du sous-arbre (5) dans le sous-arbre (3); u est la séquence terminale du sous-arbre (5); w est la séquence terminale à droite du sous-arbre (5) dans le sous-arbre (3); t est la séquence terminale à droite du sous-arbre (3) dans l’arbre principal (1).

  16. Remarquons que v et w sont toutes deux non vides. Le sous-arbre (3) correspond à la dérivation B  CC  bC  bA  bBC  bBb On peut appliquer au B de la séquence résultante bBb la même suite de dérivations, ce qui donne la séquence bbBbb (début du « pompage »). Cela correspond à greffer tout le sous-arbre (3) à la position (6), comme montré sur la prochaine acétate.

  17. (6) B a (3) B C C C B b b C C b B C b

  18. On peut appliquer la suite de dérivations précédente au B de bbBbb autant de fois que l’on veut (ce qui revient à greffer le sous-arbre (3) en position (5) autant de fois que désiré). Finalement, on peut utiliser la production B  a, ce qui donne la séquence biabi, où i N ( ce qui revient à replacer le sous-arbre (5) à la position (5)). Après toutes ces étapes, la séquence obtenue est abbb bi a bi babb s vi u wi t Nous avons |vw| = |bb| ≥ 1 et |vuw| = |bab| ≤ 8. On voit comment on réussit à répéter les sous-séquences v et w autant de fois qu’on le désire. Cela nous permet d’obtenir, à partir de la séquence z = abbbbabbabb, de nouvelles séquences abbbbiabibabb, pour iN, qui appartiennent à L(G), tel qu’annoncé dans l’énoncé du théorème.

  19. Nous aurions pu choisir une autre décomposition de la séquence z, car il y a d’autres chemins que ACBCABa qui ont une profondeur plus grande que le nombre de symboles non terminaux de G, par exemple ABCBCb.

  20. Considérons le chemin ABCBCb le plus à droite; il contient deux répétitions de C, l’une en (2) et l’autre en (4). La séquence abbbbabbabb peut maintenant être divisée sous la forme ab b bbabbabb s v u w t • Où • s est la séquence terminale à gauche du sous-arbre (2) dans l’arbre principal (1)(c’est la séquence vide); • v est la séquence terminale à gauche du sous-arbre (4) dans le sous-arbre (2); • u est la séquence terminale du sous-arbre (4); • w est la séquence terminale à droite du sous-arbre (4) dans le sous-arbre (2)(c’est la séquence vide); • t est la séquence terminale à droite du sous-arbre (2) dans l’arbre principal (1).

  21. (ab)i b bbabbabb s vi u wi t Puisque v = ab, on a (v  ou w) et |vuw| = |abb| =3 ≤ 8. Le théorème nous indique que les séquences où i  N, appartiennent au langage généré par G. Cela est facile à vérifier en utilisant les mêmes arguments que ci-dessus.

  22. abbbb ab babb s v u w t Finalement, reconsidérons le chemin ACBCABa; il contient deux répétitions de A, l’une en (1) et l’autre en (5). La séquence abbbbabbabb peut être divisée sous la forme: • Où • s est la séquence terminale à gauche de l’arbre (1) (c’est la séquence vide); • v est la séquence terminale à gauche du sous-arbre (5) dans l’arbre (1); • u est la séquence terminale du sous-arbre (5); • w est la séquence terminale à droite du sous-arbre (5) dans l’arbre (1); • t est la séquence terminale à droite de l’arbre (1) (c’est la séquence vide)

  23. (abbbb)i ab (babb)i s vi u wi t Puisque (v  ou w), le théorème nous indique que les séquences où iN, appartiennent au langage généré par G. Cela est facile à vérifier en utilisant encore une fois les mêmes arguments.

  24. Remarque • Grâce à ce théorème, on peut montrer que certains langages dépendent du contexte. • Toutefois, afin d’en permettre une utilisation plus facile, nous allons l’énoncer de manière différente dans le corollaire de l’acétate suivante.

  25. Corollaire 2.42 • Soit L un langage infini. Si, quelle que soit p > 0, il existe au moins une séquence z = svuwt de L: |z| ≥ p et |vw| ≥ 1 et |vuw| ≤ p et il existe un i  N tel que la séquence sviuwit n’appartient pas à L, alors L n’est pas un langage non contextuel (donc L est contextuel).

  26. Démarche Démontrer qu’un langage L est contextuel: • Démontrer que L est infini. • Pour tout p > 0 • Choisir une séquence z avec |z| ≥ p. • Montrer que pour tout découpage :z =svuwt avec |vw| ≥ 1 et |vuw| ≤ p :  i  N tel que z’=sviuwit  L.

  27. Exemple 2.43 • Montrons que le langage L = {akbkck : k  N} est contextuel. C’est bien un langage infini; nous pouvons donc appliquer le corollaire précédent. • Considérons un entier quelconque p > 0 et prenons la séquence z=apbpcp L. Il est clair |z| ≥ p. Supposons que z soit décomposée de façon quelconque de la sorte z=svuwt, où |vw| ≥ 1 et |vuw| ≤ p.

  28. Il faut montrer qu’alors il existe i  N tel que sviuwit L. Puisque nous ne connaissons pas la forme exacte des sous-séquences s, t, u, v, w, il nous faudra étudier tous les cas possibles. • Si v contient des a et des b, la séquence sv2uw2t contient un b qui précède un a (rappel (ab)2 = abab). Ce n’est donc pas une séquence de L. Il en est de même si v contient à la fois des b et des c. Remarquons que v ne peut pas contenir a,b et c à la fois à cause de |vuw| ≤ p.

  29. En appliquant le même raisonnement à w, on voit que si w contient au moins deux symboles différents, alors sv2uw2t  L. • Si v contient seulement des a, la séquence sv2uw2t contient plus de a que la séquence svuwt. • Si la sous-séquence w2 introduit à la fois des b et des c pour équilibrer les a supplémentaires, on a sv2uw2t  L, par le cas précédent. • Et si w2 introduit seulement des b, on a sv2uw2t  L, car les c sont en déficit; il en est de même si w2 introduit seulement des c ( les b sont en déficit). • Pour la même raison, si v contient seulement des b ou seulement des c, on a sv2uw2t  L.

  30. En appliquant le même raisonnement à w, on voit que si w contient seulement des a, ou seulement des b, ou seulement des c, alors sv2uw2t  L. • Comme l’une des sous-séquences v ou w doit être non vide, nous avons épuisé toutes les possibilités. • Le langage L n’est donc pas un langage non contextuel.

  31. Exercice • Montrez que le langage L = {ajbkajbkajbk: j, k  N+} n’est pas un langage non contextuel. • Solution:Le langage L est infini. Nous pouvons appliquer le corollaire 2.42. D’après le corollaire, il suffit de montrer que pour tout entier p positif, il existe une séquence z de longueur supérieure ou égale à p et pour tous les découpages z=svuwt, |vw| ≥ 1 et |vuw| ≤ p: il existe un i  N tel que la séquence sviuwitque sviuwit L.

  32. Soit z=apbpapbpapbpL.Supposons qu ’elle soit décomposée sous la forme z=svuwt, |z| ≥ p et |vw| ≥ 1 et |vuw| ≤ p. Comme nous ne connaissons pas s, t, u, v, w, il faut étudier les divers cas qui peuvent se présenter.

  33. Notons que la séquence séquence z = apbpapbpapbp L et nous avons |z| ≥ p. La séquence z contient exactement 3 sous-séquences de a séparées par des b (au moins un b car p  N+ ). Si la sous-séquence v contient des a et des b, alors v4 contient 4 suites de a séparées par des b. Donc sv4uw4t L, car cette séquence contient plus de 3 sous-séquences de a séparées par des b.

  34. v v v • De la même manière, si w contient à la fois des a et des b, alors sv4uw4t L. • Supposons v = ai pour un certain i ≥0 (i.e. que v contient seulement des a). La situation est l ’une des trois suivantes: • a … ab … ba … ab … ba … ab … b • a … ab … ba … ab … ba … ab … b • a … ab … ba … ab … ba … ab … b • i.e que v contient des a venant d ’une seule des trois séries de a.

  35. Pour que la séquence z’=sv2uw2t soit une séquence de L, il faudrait que w contienne des a venant des deux autres séries de a, sans contenir de b (à cause de la partie 2), ce qui est impossible, puisqu’il y a au moins un b entre deux séries de a, donc z’ L. • De même. Si v = bi, i≥0, on a sv2uw2t L. • En procédant comme en 3 et 4, on voit que w ne peut contenir seulement des a ou seulement des b. Comme v ou w, nous avons considéré tous les cas possibles.

  36. Automates à pile déterministes • Dans cette sous-section, nous donnerons une définition de ce que sont les automates à pile déterministes, puis nous montrerons que ceux-ci sont moins puissants que les automates à pile non déterministes, tout en étant quand même plus puissants que les automates finis.

  37. a, ;& a, ;# f 2 1 , &;# • Les automates à pile que nous avons rencontrés jusqu’ici ne sont pas nécessairement déterministes. Par exemple, considérons l’automate suivant, dont l’alphabet de ruban est  = {a, b} et l’alphabet de pile  = {#, &}.

  38. a, ;& a, ;# 1 , &;# f 2 • Cet automate n’est pas totalement défini car: • dans l’état 1, si le symbole d’entrée est b, aucune transition n’est possible; • dans l’état 2, si b est le symbole d’entrée et # le symbole sur la pile, aucune transition n’est possible. • Il est ambigu car, dans l’état 2, deux transitions sont possibleslorsque a est le symbole d’entrée et & le symbole sur la pile.

  39. a, b;  1 2 a, ;  Supposons qu’on veuille construire un sous-automate déterministe qui exécute la transition (1, a, b; 2, ) si b est sur la pile (1, a, ; 2, ) sinon. Le sous-automate suivant ne fait pas l’affaire car il n’est pas déterministe (il peut choisir parmi les deux transitions sib est sur la pile).

  40. a, b;  a, a; a 1 2 a, #; # Supposons que  = {a, b, # }. Alors le sous-automate suivant fait ce qu’on veut et est déterministe ( du moins en ce quiconcerne la lecture d’un a dans l ’état 1). En effet, s’il y a un b sur la pile, il le dépile. S’il y a un autresymbole, il le dépile et le rempile, ce qui revient à ne pas toucher à la pile. Cependant, il ne faut pas que la pile soit vide, car alorsl’effet de la transition a,  ;  du premier sous-automate ne peut être obtenu. Une façon de s’assurer que la pile n’est pas vide estd’empiler un # au début de l’exécution et de le dépiler à la fin seulement.

  41. Définition • Un automate à pile (S, , , T, , F ) est déterministe si et seulement si , pour tout triplet (p, x, y)  S    , il y a une et une seule transition dans T de la forme (p, u, v;q, z), où • (u, v)  {(x, y), (x, ), (, y), (, )}; • q  S; • z    {}.

  42. En d’autres termes, un automate à pile est déterministe si et seulement s’il y a une et une seule transition possible pour chauqe triplet (état, symbole d’entrée, symbole de pile).

  43. a, ;& a, ;# 1 , &;# f 2 Exemple • Soit l ’automate Dont l ’alphabet de ruban est  = {a, b} et l ’alphabet depile  = {#, &}.

  44. a, ;& a, ;# 1 , &;# f 2 Cet automate n’est pas déterministe pour plusieurs raisons.En voici deux: Prenons (1, b, #)  S  S  . Il n’y a aucune transition dela forme (1, u, v ; q, z) avec (u, v)  {(b, #), (b, ), (, #)(, ) }. Autrement dit, il n’y a pas de transition à partir de l’état 1 lorsque le symbole d’entrée est un b et le symbole sur la pile un #. L ’automate n’est pas complètement défini. Prenons (2, a, &)  S  S  . Il y a deux transitions de laforme (2, u, v ; q, z) avec (u, v)  {(a, &), (a, ), (, &), (, )},soit (2, a, ; 2, &) et ( 2 , , & ; 1, #). L’automate est ambigu.

  45. a, #;& a, ;# 1 , &;# f 2 L’automate suivant, dont l’alphabet de ruban est  = {a, b}et l’alphabet de pile  = {#, &}, n’est pas déterministe, car il n’est pas complètement défini. Cependant, il n’est pas ambigu.

  46. a, #;& a, ;# 1 , &;# , ; 3 f f 2 2 b, #; b, ; a, #;& a, ;# 1 , &;# Ajoutons un état poubelle et les transitions nécessaires afin de le rendre déterministe, sans changer le langage accepté.

  47. , ; 3 b, #; b, ; a, #;& f a, ;# 2 1 , &;# Les transitions ajoutées ne changent pas le langage accepté. Toutes ces transitions n’empilent rien, mais elles pourraient aussi empiler quelque chose sans changer le langage accepté.

  48. État Entrée Pile Transition 1 a # (1, a, ;2, #)1 a & (1, a, ;2, #)1 b # (1, b, ;3, )1 b & (1, b, ;3, )2 a # (2, a, #;2, &)2 a & (2, , &;1, #)2 b # (2, b, #;3, )2 b & (2, , &;1, #)3 a # (3, a, ;3, )3 a & (3, , ;3, )3 b # (3, , ;3, )3 b & (3, , ;3, ) , ; 3 b, #; b, ; a, #;& a, ;# 1 f 2 , &;# Cet automate est déterministe. Afin de le vérifier, montrons qu’il y a une et une seule transition pour chaque triplet ( état, symbole d’entrée, symbole de pile ).

  49. Exercice • Pour chacun des automates à pile qui suivent, dites s’il est déterministe et expliquez pourquoi. Dans le cas où un automate n’est pas déterministe, donnez toutes les situations où le non déterminisme se manifeste.

  50. a, d;c b, d;b A a, ;b , b;b b, ;c , c;b f B 1) M1 = ({A, B}, (a, b), (b, c, d), T1, A, {B}) où l’ensemble de transitions T1 est décrit par le diagramme de transitions qui suit. Solution: L’automate M1 est déterministe, car il y a une seule transition possible pour chaque triplet (état, symbole d’entrée, symbole de pile); cette transition est donnée dans la table suivante.

More Related