« Langage algébrique » : différence entre les versions

Un article de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
Cogk42 (discuter | contributions)
Balises : Modification par mobile Modification par application mobile
ManiacParisien (discuter | contributions)
m Présentation des divers termes, et un petit ajout devant les exemple, et des références biblio
Ligne 4 : Ligne 4 :
Les langages algébriques forment les langages de type 2 dans la [[hiérarchie de Chomsky]]. Ils ont des applications importantes dans la description des [[langage de programmation|langages de programmation]] et en [[linguistique]]. Ils interviennent également dans la description des langages [[XML]].
Les langages algébriques forment les langages de type 2 dans la [[hiérarchie de Chomsky]]. Ils ont des applications importantes dans la description des [[langage de programmation|langages de programmation]] et en [[linguistique]]. Ils interviennent également dans la description des langages [[XML]].


On trouve plusieurs termes pour désigner un langage algébrique; ceci provient du fait que le terme anglais « ''context-free'' » est malcommode à traduire. On peut se contenter de le mettre entre
guillemets : '''langage « context-free »''', ou le traduire par '''langage non contextuel''', '''langage hors-contexte''', '''langage acontextuel'''; tous ces termes sont employés et équivalents.
== Quelques exemples ==
== Quelques exemples ==
Les langages algébriques ont pour objectif de capturer une structure des mots qui consiste en des associations de symboles, typiquement représentées par des groupements de parenthèses; ces mots et langages correspondent bien à des expressions structurées dans les langages de programmation (la structure ''begin'' - ''end'', ou l'indentation), et se représentent aussi dans la hiérarchisation d'informations par des arbres par exemple. Toutes ces possibilités dépassent les capacités d'un [[langage rationnel]].

*Le langage {{indente|<math>
*Le langage {{indente|<math>
\{a^n b^n \mid n \geqslant 0\} = \{\varepsilon, ab, aabb, aaabbb, \dots\}</math>}} est l'exemple type d'un langage algébrique qui n'est pas un [[langage rationnel]]. Il est formé des mots qui ont autant de lettres <math>a</math> que de lettres <math>b</math>, et avec la condition supplémentaire que les lettres <math>a</math> précèdent les lettres <math>b</math>.
\{a^n b^n \mid n \geqslant 0\} = \{\varepsilon, ab, aabb, aaabbb, \dots\}</math>}} est l'exemple type d'un langage algébrique qui n'est pas un [[langage rationnel]]. Il est formé des mots qui ont autant de lettres <math>a</math> que de lettres <math>b</math>, et avec la condition supplémentaire que les lettres <math>a</math> précèdent les lettres <math>b</math>.
Ligne 27 : Ligne 29 :
* L'[[Étoile de Kleene|étoile]] d'un langage algébrique est algébrique.
* L'[[Étoile de Kleene|étoile]] d'un langage algébrique est algébrique.
* L'[[Intersection (mathématiques)|intersection]] de deux langages algébriques ne l'est pas nécessairement. Par exemple, l'intersection des langages <math>\{a^n b^n c^m \mid n,m > 0\}</math> et <math>\{a^n b^m c^m \mid n,m > 0\}</math> est <math>\{a^n b^n c^n \mid n > 0\}</math>. Ce langage n'est pas algébrique (on le prouve traditionnellement à l'aide d'un [[lemme d'itération pour les langages algébriques]]). Par conséquent, la classe des langages algébriques n'est pas non plus close par [[Complémentaire (théorie des ensembles)|complémentaire]].
* L'[[Intersection (mathématiques)|intersection]] de deux langages algébriques ne l'est pas nécessairement. Par exemple, l'intersection des langages <math>\{a^n b^n c^m \mid n,m > 0\}</math> et <math>\{a^n b^m c^m \mid n,m > 0\}</math> est <math>\{a^n b^n c^n \mid n > 0\}</math>. Ce langage n'est pas algébrique (on le prouve traditionnellement à l'aide d'un [[lemme d'itération pour les langages algébriques]]). Par conséquent, la classe des langages algébriques n'est pas non plus close par [[Complémentaire (théorie des ensembles)|complémentaire]].
* L'image miroir d'un langage algébrique est un langage algébrique<ref group="a" name="p285">Chapitre 7, {{p.|285}}</ref>.
* L'image miroir d'un langage algébrique est un langage algébrique<ref name="p285">{{harvsp|Hopcroft|Motwani|Ullman|2001|id=HMU|loc=Chapitre 7, {{p.|285}}}}.</ref>.
* L'intersection d'un langage algébrique et d'un langage rationnel est toujours algébrique<ref group="a" name="p285" />.
* L'intersection d'un langage algébrique et d'un langage rationnel est toujours algébrique<ref name="p285" />.
* L'image homomorphe, l'image homomorphe inverse d'un langage algébrique est algébrique.
* L'image homomorphe, l'image homomorphe inverse d'un langage algébrique est algébrique.
De ces propriétés, il résulte que
De ces propriétés, il résulte que
Ligne 45 : Ligne 47 :


=== Propriétés indécidables ===
=== Propriétés indécidables ===
L'appartenance d'un mot à un langage algébrique est [[Décidabilité|décidable]] ; elle peut être testée grâce à l'[[Algorithme de Cocke-Younger-Kasami|algorithme CYK]]. On sait également décider si un langage algébrique (défini à partir d'une grammaire) est vide<ref group="a" name="p296">Chapitre 7, {{p.|296}}.</ref>.
L'appartenance d'un mot à un langage algébrique est [[Décidabilité|décidable]] ; elle peut être testée grâce à l'[[Algorithme de Cocke-Younger-Kasami|algorithme CYK]]. On sait également décider si un langage algébrique (défini à partir d'une grammaire) est vide<ref name="p296">{{harvsp|Hopcroft|Motwani|Ullman|2001|id=HMU|loc=Chapitre 7, {{p.|296}}}}.</ref>.


Mais contrairement aux langages rationnels, de nombreux autres problèmes sur les langages algébriques sont indécidables. Par exemple, il n'existe pas d'algorithme pour décider si deux langages algébriques donnés sont égaux<ref group="a" name="p302">Chapitre 7, {{p.|302}}</ref>. Plus précisément, les propriétés suivantes sont indécidables. Soient <math>L</math>, <math>L_1</math>, <math>L_2</math> des langages algébriques, donnés par exemple par leurs grammaires, sur un alphabet <math>A</math>, et soit <math>R</math> un langage rationnel. Sont indécidables :
Mais contrairement aux langages rationnels, de nombreux autres problèmes sur les langages algébriques sont indécidables. Par exemple, il n'existe pas d'algorithme pour décider si deux langages algébriques donnés sont égaux<ref name="p302">{{harvsp|Hopcroft|Motwani|Ullman|2001|id=HMU|loc=Chapitre 7, {{p.|302}}}}.</ref>. Plus précisément, les propriétés suivantes sont indécidables. Soient <math>L</math>, <math>L_1</math>, <math>L_2</math> des langages algébriques, donnés par exemple par leurs grammaires, sur un alphabet <math>A</math>, et soit <math>R</math> un langage rationnel. Sont indécidables :
* <math>L_1\cap L_2 = \emptyset</math> ;
* <math>L_1\cap L_2 = \emptyset</math> ;
* <math>L= A^*</math> ;
* <math>L= A^*</math> ;
Ligne 69 : Ligne 71 :
La définition implique que l'appartenance d'un mot à un langage algébrique déterministe peut être testée en temps linéaire, contrairement au cas des langages algébriques quelconques. En outre, tout langage algébrique déterministe peut être décrit par une [[Analyse LR|grammaire LR(1)]] et réciproquement. Cela permet de les utiliser pour des applications pratiques. Ainsi, la plupart des [[langages de programmation]] sont des langages algébriques déterministes.
La définition implique que l'appartenance d'un mot à un langage algébrique déterministe peut être testée en temps linéaire, contrairement au cas des langages algébriques quelconques. En outre, tout langage algébrique déterministe peut être décrit par une [[Analyse LR|grammaire LR(1)]] et réciproquement. Cela permet de les utiliser pour des applications pratiques. Ainsi, la plupart des [[langages de programmation]] sont des langages algébriques déterministes.


La classe des langages algébriques déterministes est close par complémentaire<ref group="b">Section 4.4.4, {{p.|97}}</ref>. Cependant :
La classe des langages algébriques déterministes est close par complémentaire<ref name="Wolper">{{harvsp|Wolper|2006|loc=Section 4.4.4, {{p.|97}}}}</ref>. Cependant :
* elle n'est pas close par intersection (même contre-exemple que dans le cas non déterministe) ;
* elle n'est pas close par intersection (même contre-exemple que dans le cas non déterministe) ;
* elle n'est pas close par union (conséquence des deux propriétés précédentes) ;
* elle n'est pas close par union (conséquence des deux propriétés précédentes) ;
Ligne 119 : Ligne 121 :


== Bibliographie ==
== Bibliographie ==
;Ouvrages en français

<!-- Dragon -->
* {{Introduction to Automata Theory, Languages, and Computation}}
* {{Ouvrage | langue = fr | auteur1 = Alfred Aho | auteur2 = Monica Lam | auteur3 = Ravi Sethi | auteur4 = Jeffrey Ullman | titre = Compilateurs : principes, techniques et outils | sous-titre = Avec plus de 200 exercices | éditeur = Pearson | lieu = | numéro édition = 2 |année = 2007 | pages totales = 928 | isbn = 9782744070372 | isbn2 = 2744070378}}
{{Références|colonnes=1|groupe="a"}}
<!-- Wolper -->
* {{fr}} Pierre Wolper, ''Introduction à la calculabilité ({{3e}} édition)'', Dunod 2006. {{ISBN|2-10-049981-5}}.
* {{ouvrage|auteur=Pierre Wolper | titre=Introduction à la calculabilité|numéro d'édition=3|éditeur= Dunod |année=2006|isbn=2-10-049981-5}}.
{{Références|colonnes=1|groupe="b"}}
<!-- Autebert -->

* {{Ouvrage
* {{Ouvrage
| auteur=Jean-Michel Autebert
| auteur=Jean-Michel Autebert
Ligne 132 : Ligne 134 :
| isbn=978-2-225-81087-9
| isbn=978-2-225-81087-9
|id=Autebert}}
|id=Autebert}}
<!-- Carton -->

* {{Langages formels, calculabilité et complexité}} <!-- l’id autogénéré devrait suffire, cf. modèle:ouvrage -->
* {{Langages formels, calculabilité et complexité}} <!-- l’id autogénéré devrait suffire, cf. modèle:ouvrage -->
<!-- ABB -->

* {{Chapitre
* {{Chapitre
| auteurs = Jean-Michel Autebert, Jean Berstel et Luc Boasson
| auteurs = Jean-Michel Autebert, Jean Berstel et Luc Boasson
Ligne 148 : Ligne 150 :
| id = ABB
| id = ABB
}}
}}
;Ouvrage en allemand
<!-- Erk Priese -->
* {{Ouvrage | langue = de | auteur1 = Katrin Erk | auteur2 = Lutz Priese | titre = Theoretische Informatik : eine umfassende Einführung | éditeur = Springer | lieu = Berlin | année = 2008 | pages totales = | isbn = 9783540763192 | oclc = 244015158}}.
;Ouvrages en anglais
<!-- Harrison -->
* {{Ouvrage | langue = en | auteur = Michael A. Harrison | titre = Introduction to Formal Language Theory | éditeur = Addison-Wesley | lieu = Reading, Mass.| année = 1978 | pages totales = | isbn = 0201029553 | oclc = 266962302}}.
<!-- Hopcroft -->
* {{Ouvrage | langue = en | auteur1 = John E. Hopcroft | auteur2 = Rajeev Motwani | auteur3 = Jeffrey D. Ullman | titre = Introduction to Automata Theory, Languages, and Computation | éditeur = Addison Wesley | numéro d’édition = 2 |lieu = | année = 2001 | pages totales = 521 | isbn = 9780201441246 | isbn2 = 0201441241
|id=HMU}}.
<!-- Linz -->
* {{Ouvrage | langue = en | auteur = Peter Linz | titre = An Introduction to Formal Languages and Automata | éditeur = Jones & Bartlett Learning | lieu = | année = 2001 | pages totales = 410 | isbn = 9780763714222 | isbn2 = 0763714224}}.

<!--
<!--
== Lien externe ==
== Lien externe ==
* [http://www.gdi.uni-bamberg.de/teaching/SS09/GdI-GTI-B/tomlect8.pdf http://www.gdi.uni-bamberg.de/teaching/SS09/GdI-GTI-B/tomlect8.pdf]
* [http://www.gdi.uni-bamberg.de/teaching/SS09/GdI-GTI-B/tomlect8.pdf http://www.gdi.uni-bamberg.de/teaching/SS09/GdI-GTI-B/tomlect8.pdf]
-->
-->

== Voir aussi ==
== Voir aussi ==
* [[Grammaire algébrique]]
* [[Grammaire algébrique]]

Version du 9 janvier 2016 à 10:20

En théorie des langages formels, un langage algébrique ou langage non contextuel est un langage qui est engendré par une grammaire algébrique. De manière équivalente un langage algébrique est un langage reconnu par automate à pile.

Les langages algébriques forment les langages de type 2 dans la hiérarchie de Chomsky. Ils ont des applications importantes dans la description des langages de programmation et en linguistique. Ils interviennent également dans la description des langages XML.

On trouve plusieurs termes pour désigner un langage algébrique; ceci provient du fait que le terme anglais « context-free » est malcommode à traduire. On peut se contenter de le mettre entre guillemets : langage « context-free », ou le traduire par langage non contextuel, langage hors-contexte, langage acontextuel; tous ces termes sont employés et équivalents.

Quelques exemples

Les langages algébriques ont pour objectif de capturer une structure des mots qui consiste en des associations de symboles, typiquement représentées par des groupements de parenthèses; ces mots et langages correspondent bien à des expressions structurées dans les langages de programmation (la structure begin - end, ou l'indentation), et se représentent aussi dans la hiérarchisation d'informations par des arbres par exemple. Toutes ces possibilités dépassent les capacités d'un langage rationnel.

  • Le langage est l'exemple type d'un langage algébrique qui n'est pas un langage rationnel. Il est formé des mots qui ont autant de lettres que de lettres , et avec la condition supplémentaire que les lettres précèdent les lettres .
  • Les langages de Dyck (ce sont des langages de mots bien parenthésées) sont des langages algébriques.
  • Les expressions arithmétiques, utilisant les quatre opérations élémentaires, par exemple , etc, forment un langage algébrique. C'est d'ailleurs cette observation qui historiquement est à la base du développement des compilateurs qui doivent, entre autres, traduire des expressions arithmétiques complexes en les décomposant en opération élémentaires.

Pour prouver qu'un langage est algébrique, on donne une grammaire non contextuelle qui l'engendre. Voir le paragraphe d'exemples de l'article en question pour plus de détails. Pour des langages plus compliqués, on peut utiliser des méthodes plus puissantes, comme les transductions rationnelles ou le fait que les langages algébriques forment une famille abstraite de langages.

  • Le langage est algébrique. Les mots de ce langage sont composés d'un premier groupe formé d'un certain nombre de lettres , suivis d'autant de blocs ; chacun de ces blocs est formé de lettres suivies du même nombre de . Cette description donne une indication sur la manière de construire le langage : il est obtenu à partir du langage , en substituant, à chaque lettre , le langage . Comme les langages algébriques sont fermés par substitution (voir ci-dessous), le langage obtenu est algébrique.
  • Le langage de Goldstine sur deux lettres est encore plus compliqué. C'est l'ensemble des mots , et pour un avec . On veut donc que ou ou... . Il est presque plus simple de se demander quand un mot n'est pas dans le langage : c'est lorsque les sont tous égaux à , donc lorsque le mot est .
    Pour vérifier que ce langage est algébrique, on part du langage algébrique et on applique la substitution Le langage est le résultat de cette substitution.Ce langage est lié au mot infini . En effet, le langage est l’ensemble des mots qui ne sont pas préfixes de mots de et qui se terminent par la lettre .

Propriétés

Tout langage rationnel est algébrique car il peut être décrit par une grammaire régulière, qui est un cas particulier de grammaire non contextuelle.

Propriétés de clôture

La classe des langages algébriques possède certaines propriétés de clôture :

  • L'union et la concaténation de deux langages algébriques sont des langages algébriques.
  • L'étoile d'un langage algébrique est algébrique.
  • L'intersection de deux langages algébriques ne l'est pas nécessairement. Par exemple, l'intersection des langages et est . Ce langage n'est pas algébrique (on le prouve traditionnellement à l'aide d'un lemme d'itération pour les langages algébriques). Par conséquent, la classe des langages algébriques n'est pas non plus close par complémentaire.
  • L'image miroir d'un langage algébrique est un langage algébrique[1].
  • L'intersection d'un langage algébrique et d'un langage rationnel est toujours algébrique[1].
  • L'image homomorphe, l'image homomorphe inverse d'un langage algébrique est algébrique.

De ces propriétés, il résulte que

Clôture par substitution

Une substitution de dans est une application de dans l'ensemble des parties de qui est un morphisme de monoïde, c'est-à-dire vérifie les deux propriétés:

  1. pour des mots et .

Dans la deuxième formule, le produit est le produit des parties de .

Un substitution est algébrique si est un langage algébrique pour toute lettre .

Le théorème de substitution affirme que si est une substitution algébrique, alors est un langage algébrique pour tout langage algébrique .

Propriétés indécidables

L'appartenance d'un mot à un langage algébrique est décidable ; elle peut être testée grâce à l'algorithme CYK. On sait également décider si un langage algébrique (défini à partir d'une grammaire) est vide[2].

Mais contrairement aux langages rationnels, de nombreux autres problèmes sur les langages algébriques sont indécidables. Par exemple, il n'existe pas d'algorithme pour décider si deux langages algébriques donnés sont égaux[3]. Plus précisément, les propriétés suivantes sont indécidables. Soient , , des langages algébriques, donnés par exemple par leurs grammaires, sur un alphabet , et soit un langage rationnel. Sont indécidables :

  •  ;
  •  ;
  •  ;
  •  ;
  •  ;
  •  ;
  • Le complémentaire de est algébrique ;
  • est algébrique ;
  • est rationnel ;
  • est inhéremment ambigu. Il est même indécidable qu'une grammaire donnée soit inambiguë.

Langages algébriques déterministes et inambigus

Langages déterministes

Un langage algébrique est dit déterministe s'il est reconnu par un automate à pile déterministe.

La classe des langages algébriques déterministes contient la classe des langages rationnels et est strictement incluse dans celle des langages algébriques. Le contre-exemple type de langage algébrique non déterministe est l'ensemble des palindromes.

La définition implique que l'appartenance d'un mot à un langage algébrique déterministe peut être testée en temps linéaire, contrairement au cas des langages algébriques quelconques. En outre, tout langage algébrique déterministe peut être décrit par une grammaire LR(1) et réciproquement. Cela permet de les utiliser pour des applications pratiques. Ainsi, la plupart des langages de programmation sont des langages algébriques déterministes.

La classe des langages algébriques déterministes est close par complémentaire[4]. Cependant :

  • elle n'est pas close par intersection (même contre-exemple que dans le cas non déterministe) ;
  • elle n'est pas close par union (conséquence des deux propriétés précédentes) ;
  • elle n'est pas close par concaténation (l'étoile de Kleene du langage défini plus haut est algébrique déterministe, mais pas ) ;
  • elle n'est pas close par miroir, par exemple, est algébrique déterministe mais pas .

Langages inambigus

Un langage algébrique est inambigu ou non ambigu s'il existe une grammaire inambiguë qui l'engendre. Un langage qui n'est pas inambigu est inhéremment ambigu.

Tout langage déterministe est inambigu, mais les langages inambigus sont fermés par miroir, donc l'inclusion est stricte. Il existe des langages algébriques inhéremment ambigus, comme le langage . Ceci se prouve à l'aide du lemme d'Ogden.

Théorèmes de représentation

Trois théorèmes donnent une façon générale de représenter les langages algébriques[5].

Théorème de Chomsky-Schützenberger

Le théorème affirme que les langages de Dyck sont des langages algébriques « typiques ».

Théorème de Chomsky-Schützenberger — Un langage sur un alphabet est algébrique si et seulement s'il existe un langage de Dyck , un langage rationnel et un morphisme alphabétique (c'est-à-dire tel que l'image d'une lettre est une lettre ou le mot vide) tels que

.

Théorème de Shamir

Théorème de Shamir — Un langage sur un alphabet est algébrique si et seulement s'il existe un alphabet , une lettre et un morphisme de dans l'ensemble des parties de tels que

.

Ici, est une copie disjointe de , et est le langage de Dyck sur

Théorème du langage le plus difficile, de Greibach

Le « langage le plus difficile » (hardest language en anglais) a été défini par Sheila Greibach en 1973. C'est un langage où le test d'appartenance est le plus difficile, au sens que tout algorithme de test d'appartenance se traduit en un test d'appartenance pour tout autre langage algébrique.

Étant donné un langage sur un alphabet , la version non déterministe de , et le langage noté défini comme suit. On ajoute à les trois nouvelles lettres . Sur ce nouvel alphabet, on considère le langage . Tout mot de admet une factorisation

et chaque mot lui-même s'écrit sous la forme

où les mots sont sur l'alphabet . Un choix dans est un mot

obtenu en choisissant un facteur dans chaque . Notons l'ensemble des choix dans . La version no déterministe de est défini par

Le langage le plus difficile est par définition le langage qui est la version non déterministe du langage de Dyck sur deux paires de parenthèses.

Théorème du langage le plus difficile (Greibach) — Un langage sur un alphabet est algébrique si et seulement s'il existe un morphisme tel que l'on ait

,

est le langage le plus difficile et est une lettre qui n'est pas dans .

La terminologie vient du fait que le test d'appartenance d'un mot à se réduit au test d'appartenance du mot au langage . Ainsi, tout algorithme de test d'appartenance à fournit un algorithme général de test d'appartenance, pour les langages algébriques, de même complexité.

Notes

  1. a et b Hopcroft, Motwani et Ullman 2001, Chapitre 7, p. 285.
  2. Hopcroft, Motwani et Ullman 2001, Chapitre 7, p. 296.
  3. Hopcroft, Motwani et Ullman 2001, Chapitre 7, p. 302.
  4. Wolper 2006, Section 4.4.4, p. 97
  5. Autebert, Berstel, Boasson (1997)

Bibliographie

Ouvrages en français
  • Alfred Aho, Monica Lam, Ravi Sethi et Jeffrey Ullman, Compilateurs : principes, techniques et outils : Avec plus de 200 exercices, Pearson, , 2e éd., 928 p. (ISBN 9782744070372 et 2744070378)
  • Pierre Wolper, Introduction à la calculabilité, Dunod, , 3e éd. (ISBN 2-10-049981-5).
  • Jean-Michel Autebert, Langages algébriques, Masson, (ISBN 978-2-225-81087-9)
  • Olivier Carton, Langages formels, calculabilité et complexité, [détail de l’édition] (lire en ligne)
  • Jean-Michel Autebert, Jean Berstel et Luc Boasson, « Context-free languages and pushdown automata », dans G. Rozenberg, A. Salomaa (éditeurs), Handbook of Formal Languages, vol. 1 : Word, Language, Grammar, Springer Verlag, (ISBN 978-3540604204)
Ouvrage en allemand
  • (de) Katrin Erk et Lutz Priese, Theoretische Informatik : eine umfassende Einführung, Berlin, Springer, (ISBN 9783540763192, OCLC 244015158).
Ouvrages en anglais
  • (en) Michael A. Harrison, Introduction to Formal Language Theory, Reading, Mass., Addison-Wesley, (ISBN 0201029553, OCLC 266962302).
  • (en) John E. Hopcroft, Rajeev Motwani et Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, Addison Wesley, , 521 p. (ISBN 9780201441246 et 0201441241).
  • (en) Peter Linz, An Introduction to Formal Languages and Automata, Jones & Bartlett Learning, , 410 p. (ISBN 9780763714222 et 0763714224).

Voir aussi