Aller au contenu

Langage rationnel

Un article de Wikipédia, l'encyclopédie libre.


En théorie des langages, les langages rationnels ou langages réguliers ou encore langages reconnaissables peuvent être décrits de plusieurs façons équivalentes :

Les langages rationnels ont des applications à la fois théoriques et pratiques. Ils sont utilisés en informatique (par exemple en compilation de programmes), en linguistique (par exemple pour décrire la morphologie d'une langue). Ils interviennent dans les traitements de texte, ou dans des commandes spécifiques comme grep du système Unix.

Pour la manipulation des langages rationnels et des automates, il existe de nombreux outils informatiques, notamment dans les systèmes du type Unix comme la commande lex. Le langage informatique Java fournit aussi la classe Pattern. Les algorithmes utilisés pour manipuler les langages rationnels possèdent en général une implémentation rapide et efficace.

Définitions

[modifier | modifier le code]

Alphabet et langage

[modifier | modifier le code]

On considère un ensemble fini de caractères ou lettres, appelé alphabet[1]. Une chaîne de caractères (ou chaîne ou mot) est une suite finie, éventuellement vide, de caractères. Par exemple, la chaîne formée de la lettre , puis de la lettre , puis encore de la lettre , se note .

La longueur d'un mot est définie comme le nombre de lettres qui constituent ce mot : ainsi, par exemple, le mot est de longueur 4. Et le mot vide, noté ou , est le seul mot de longueur nulle.

L'ensemble des mots que l'on peut former avec des lettres de , y compris le mot vide, est noté . Toute partie de s'appelle un langage[2]. L'ensemble des mots de à l'exception du mot vide est un langage noté [3].

Opérations rationnelles

[modifier | modifier le code]

Les opérations suivantes, définies sur les langages, sont appelées les opérations rationnelles[note 1]. Soient et deux parties de , autrement dit deux langages[4] :

1. la concaténation ou le produit de et , noté , est l'ensemble de mots , où est dans et est dans .

Par exemple, le produit de et de est ;

2. l'union ensembliste, de et , notée , est l'ensemble des mots appartenant à ou à .

Par exemple, l'union ensembliste de et de est ;

3. l'étoile de Kleene, notée est le plus petit langage qui contient le mot vide , le langage , et qui est clos pour l'opération de concaténation. C'est aussi l'ensemble de tous les produits de tous les mots de .

Par exemple, .

Expressions rationnelles

[modifier | modifier le code]

Les expressions rationnelles[note 1] sur l'alphabet sont des expressions obtenues à partir des lettres de , par un nombre fini d'applications des opérations rationnelles suivantes[4] :

  1. L'opération ou (pour représenter l'union)
  2. L'opération (pour représenter le produit, ce point est d'ailleurs souvent omis)
  3. L'opération (pour représenter l'étoile de Kleene, aussi appelée itération).

L'ensemble des expressions rationnelles sur un alphabet est noté . Il est défini par induction comme suit[5] :

Langages rationnels

[modifier | modifier le code]

Les langages rationnels[note 1] ou langages réguliers ou encore langages reconnaissables utilisant un alphabet peuvent être définis de plusieurs façons équivalentes :

  • ce sont les langages décrits par les expressions rationnelles sur l'alphabet  ;
  • ce sont les langages obtenus, à partir des lettres de et de l'ensemble vide, par l'utilisation d'un nombre fini d'opérations rationnelles ;
  • ce sont les langages utilisant les lettres de qui sont reconnus par des automates finis, d'où le nom de langages reconnaissables.

L'ensemble des langages rationnels sur l'alphabet est le plus petit ensemble de langages stable pour les opérations rationnelles, et qui contient le langage vide , les langages réduits à une lettre et le langage composé du mot vide [6].

En utilisant la première définition, on peut dénoter un langage utilisant l'alphabet comme est un élément de . Et l'ensemble des langages rationnels, noté , est alors défini par induction à partir de et des constantes 0 et 1 comme suit :

  1. , , pour chaque lettre de
  2. , , pour tous et appartenant à .

Propriétés

[modifier | modifier le code]

Deux expressions rationnelles et sur un alphabet sont dites équivalentes si elles dénotent le même langage soit, exprimé plus formellement, si .

Exemple : les expressions et sont équivalentes et dénotent un langage contenant tous les mots formés à partir des lettres et .

Dotées d'un opérateur d'addition, d'un opérateur de produit et d'une relation d'équivalence, les expressions rationnelles sont des demi-anneaux, des algèbres de Kleene et des demi-anneaux étoilés complets.

Variantes de notation

[modifier | modifier le code]

Pour diminuer les parenthèses dans les expressions, on omet les parenthèses résultant de l'associativité des opérations, et de donner la plus haute priorité à l'étoile de Kleene, suivie de la concaténation, puis de l'union. Formellement, cela signifie que l'on identifie des expressions qui se déduisent l'une de l'autre par l'application de ces règles[note 2].

On ajoute parfois aussi, aux opérateurs sur les expressions, la fermeture , donnant l'expression . Le langage dénoté est donné par , au sens de opérateur plus.

En revanche, l'opérateur de complémentation ne fait pas partie des opérations définissant les expressions rationnelles. Par contre, on définit les expressions rationnelles étendues comme les expressions incluant aussi l'opérateur de complémentation.

Dans les expressions régulières fournis par de nombreux outils de programmation ou d'édition, comme Unix, qed, grep, Emacs, d'autres opérateurs sont généralement ajoutés, avec des propriétés qui les rendent capables de décrire des langages qui ne sont pas rationnels. Ces expressions ne sont donc pas strictement équivalentes aux expressions rationnelles définies formellement ci-dessus.

Expressions rationnelles et automates finis

[modifier | modifier le code]

Le théorème de Kleene

[modifier | modifier le code]

Le théorème de Kleene affirme que l'ensemble des langages rationnels sur un alphabet est exactement l'ensemble des langages sur reconnaissables par automate fini[7]. C'est le résultat fondamental pour la théorie et les applications.

La correspondance entre langages rationnels et langages reconnaissables est effective : pour toute expression régulière, on peut construire effectivement, et de plusieurs façons, des automates qui reconnaissent le langage dénoté par l'expression. Réciproquement, à tout automate fini on peut associer une expression régulière qui dénote le langage reconnu par l'automate. Là aussi, il y a plusieurs méthodes, et on peut obtenir des expressions différentes, mais équivalentes.

Hauteur d'étoile

[modifier | modifier le code]
Exemple d'une expression rationnelle de hauteur d'étoile égale à 2.

La hauteur d'étoile d'une expression rationnelle est le nombre défini récursivement comme suit :

  1. pour toute lettre
  2. .

En d'autres termes, la hauteur d'étoile d'une expression est le nombre maximum d'étoiles imbriquées. Par exemple, et . Ces deux expressions dénotent le même langage, on voit donc que la notion de hauteur d'étoile est liée à l'expression.

La hauteur d'étoile d'un langage rationnel est le minimum des hauteurs d'étoile des expressions dénotant ce langage, c'est-à-dire :

La question de l'existence de langages rationnels de hauteur d'étoile arbitrairement grande a été posée par Lawrence C. Eggan et résolue par Françoise Dejean et Marcel-Paul Schützenberger[8]. Le problème de la hauteur d'étoile est de calculer, de manière efficace, la hauteur d'étoile d'un langage rationnel. Ce problème a résisté longtemps. Résolu la première fois en 1982[réf. souhaitée] , sa solution a été ensuite améliorée, notamment par Daniel Kirsten en 2005[9].

Une question qui est toujours ouverte en 2016 concerne le problème de la hauteur d'étoile généralisée (en): si l'on autorise, comme opérateur supplémentaire, l'opérateur de complémentation, le pouvoir de description des expressions rationnelles (appelées généralisées) augmente bien entendu. On ne sait toujours pas s'il existe des langages rationnels de hauteur d'étoile généralisée arbitrairement grande (ni même de hauteur 2). Les langages de hauteur d'étoile généralisée 0 sont les « langages sans étoile » caractérisés par Marcel-Paul Schützenberger[réf. nécessaire].

Le théorème de Myhill-Nerode

[modifier | modifier le code]

À tout langage de , on associe une relation d'équivalence sur définie de la façon suivante :

si et seulement si pour tout mot de , on a

Cette relation est une équivalence régulière à droite car elle est compatible avec la concaténation : si alors .

Le théorème de Myhill-Nerode affirme qu'un langage est rationnel si et seulement si la relation est d'indice fini, c'est-à-dire possède un nombre fini de classes d'équivalence.

Ce théorème a un intérêt théorique puisqu'il donne une caractérisation intrinsèque de l'automate minimal reconnaissant un langage donné. En effet, les états de l'automate fini déterministe minimal reconnaissant un langage rationnel sont en bijection avec les classes d'équivalence de la relation [10]. Ce résultat est aussi à la base d'un algorithme efficace de minimisation, appelé l'algorithme de Moore.

Propriétés

[modifier | modifier le code]

Propriétés algébriques

[modifier | modifier le code]
  • L'ensemble des langages rationnels est stable, en plus de l'union, du produit et de l'étoile, par complémentation et donc par intersection[11].
  • L'ensemble des langages rationnels est fermé par image miroir : si est un langage rationnel, alors est rationnel, où est l'ensemble des retournés ou images miroir des mots de [12].
  • Pour tout langage rationnel et tout mot , le quotient gauche
           
    est un langage rationnel[réf. souhaitée].
  • L'image d'un langage rationnel par un morphisme ou un morphisme inverse est un langage rationnel[11].
  • L'image, par une substitution rationnelle, d'un langage rationnel est un langage rationnel (une substitution de dans est une application de dans l'ensemble des parties de qui est un morphisme pour la structure de monoïde multiplicatif sur l'ensemble des parties de , c'est-à-dire et , où le produit dans le membre droit est le produit des parties de . Une substitution rationnelle est une substitution telle qui est un langage rationnel sur pour toute lettre de ).
  • Le produit de mélange (en anglais shuffle product) de deux langages rationnels est un langage rationnel (le produit de mélange de deux mots et est l'ensemble des mots , où les et les sont des mots, tels que et . Le produit de mélange de deux langages est la réunion des produits de mélange des mots des langages).
  • La première moitié d'un langage est le langage
         .
    En d'autres termes, on coupe au milieu des mots de de longueur paire et on garde la première partie. Si est un langage rationnel, alors est un langage rationnel.
  • Si l'on supprime, dans les mots d'un langage rationnel, une lettre sur deux, le résultat est encore un langage rationnel.

Propriétés décidables

[modifier | modifier le code]

La plupart des questions que l’on pose habituellement pour des langages formels sont décidables pour les langages rationnels, et les démonstrations sont souvent faciles[14]. On suppose que le langage ou les langages sont donnés par des automates finis. Les propriétés sont donc plutôt des propriétés des automates finis, ou simplement des graphes finis sous-jacents. Les propriétés suivantes sont décidables :

  • Un mot donné appartient-il à un langage rationnel : il suffit de tester si le mot est reconnu par l’automate.
  • Le langage rationnel est-il vide : pour cela, on teste si, parmi les états accessibles, figure un état final.
  • Le langage contient-il tous les mots : il suffit de tester si le complémentaire est vide.
  • Le langage est-il fini : pour ce faire, on teste si l'automate, une fois émondé[pas clair], a un graphe sous-jacent sans circuit.
  • Deux langages rationnels et étant donnés, a-t-on l'inclusion , l'égalité  ?
    L'inclusion se ramène à tester que langage est vide, où est le langage complément de . Comme ce langage est lui-même rationnel, la décidabilité découle de la deuxième des propriétés ci-dessus. L'égalité équivaut à la double inclusion.

Une question plus difficile concerne la complexité algorithmique de ces problèmes de décision; par exemple, le calcul du complémentaire d'un langage demande la déterminisation[Quoi ?] de l'automate, et peut donc exiger une place et un temps exponentiel[réf. souhaitée].

Lemme de l'étoile

[modifier | modifier le code]

Le lemme de l'étoile, aussi appelé lemme d'itération ou, en anglais, pumping lemma, donne une propriété nécessaire des langages rationnels. Il s'énonce informellement comme suit : dans tout mot assez long d'un langage rationnel , on peut trouver un facteur non vide que l'on peut répéter un nombre arbitraire de fois dans ce mot pour créer des mots appartenant au langage [15].

C'est en fait une propriété d'un automate reconnaissant le langage  : un mot assez long reconnu par l'automate contient nécessairement un circuit qui l'on peut parcourir un nombre arbitraire de fois, tout en restant reconnu par l'automate.

Ce lemme n'est pas une caractérisation des langages rationnels : il existe des langages qui vérifient la propriété d'itération mais qui ne sont pas rationnels[15]. Mais il est fréquemment utilisé pour démontrer qu'un langage n'est pas rationnel[note 3].

Exemples et contre-exemples

[modifier | modifier le code]

Exemples de langages rationnels

[modifier | modifier le code]

Plusieurs exemples de langages rationnels sont indiqués ci-dessous, avec une explication de leur rationalité[16] :

  • Langage fini, donc notamment défini comme : ;
  • Langage  ;
  • Langage constitué de tous mots commençant par la lettre (dénoté par ) ;
  • Langage constitué de tous les mots se terminant par la lettre (dénoté par ) ;
  • Langage constitué de tous les mots contenant un mot donné. Par exemple, pour le mot , ce langage est dénoté par  ;
  • Langage constitué de tous les mots ne contenant pas un mot donné. Par exemple, pour le mot , c'est le complémentaire du langage précédent ;
  • Langage constitué de tous les mots de longueur paire (dénoté par ) ;
  • Langage constitué de tous les mots de longueur impaire (dénoté par ) ;
  • Langage constitué de tous les mots qui contiennent un nombre pair d'une lettre donnée ;
  • Langage constitué de tous les mots utilisant l'alphabet de , sauf le mot vide : (c'est le complémentaire dans du langage ne comprenant que le mot vide) ;
  • Langage n'utilisant pas certaines lettres de . Par exemple, pour les lettres et , ce langage est le complémentaire dans de celui défini comme rationnel par  ;
  • Langage défini comme le quotient à gauche (ou à droite) de tout langage rationnel ;
  • Langage constitué des notations décimales des entiers naturels sur l'alphabet :  ;
  • Langage constitué de tous les mots qui sont l'écriture en binaire d'un entier congruent à 2 modulo 5.

Exemples de langages non rationnels

[modifier | modifier le code]

Les langages suivants ne sont pas rationnels :

  • L'ensemble de mots [15]
  • L'ensemble de mots
  • L'ensemble de mots
  • Une expression bien parenthésée est obtenue comme étant soit le mot vide, soit et sont bien parenthésées. L'ensemble des expressions bien parenthésées est aussi appelé le langage de Dyck. Ce n'est pas un langage rationnel[17].
  • L'ensemble des mots palindromes sur un alphabet à plusieurs lettres

Langages rationnels sur une seule lettre

[modifier | modifier le code]

Lorsque l'alphabet est composé d'une seule lettre , on connait une caractérisation précise des langages rationnels. Pour tout langage de , on note l'ensemble des exposants de , soit

.

On a alors la propriété suivante :

Un langage sur est rationnel si et seulement si son ensemble d'exposant est la réunion d'un ensemble fini de progressions arithmétiques.

Une progression arithmétique est un ensemble de la forme . Dans cette définition, la raison est positive ou nulle; quand elle est nulle, la progression est réduite au singleton  ; on autorise aussi à être plus grand que . Par exemple, il existe un langage rationnel sur une lettre dont l'ensemble des exposants est la réunion des entiers pairs plus grand que 10, et des entiers 3 et 5. Ce langage est .

Pour démontrer que le langage rationnel de l'énoncé a bien la forme indiquée, on considère un automate fini déterministe complet qui reconnaît . Soit son état initial, et soit

l'état atteint après la lecture de lettres. La suite d'états

est ultimement périodique; en effet, l'automate n'a qu'un nombre fini d'états, donc il existe des entiers et tels que , et alors pour tout . Soit le plus petit indice tel que apparaît deux fois, et donc une infinité de fois, dans la suite des états, et soit le plus petit entier tel que . L'ensemble des mots qui amènent l'état initial sur l'état est égal au singleton si , et est égal à sinon. Dans les deux cas, l'ensemble des exposants est une progression arithmétique. Comme le langage reconnu est une réunion de langages de ce type, il est de la forme annoncée.

La réciproque se démontre tout simplement : chaque langage de la forme est visiblement rationnel, et une réunion finie de langages de cette forme l'est encore.

Dans cette preuve, on utilise les expressions rationnelles dans une des directions, et la structure de l'automate fini dans l'autre[note 4].

Nombre de mots de longueur donnée dans un langage rationnel

[modifier | modifier le code]

Pour un langage rationnel donné, notons le nombre de mots de longueur de . Par exemple, si est l'ensemble des mots sur deux lettres ne contenant pas deux consécutifs, on a

et la suite des nombres de mots est

.

C'est en fait la suite des nombres de Fibonacci.

La série génératrice de la suite des longueurs est la série

.

Dans l'exemple, c'est la série

.

L'observation importante est que la série génératrice des longueurs, pour un langage rationnel, est toujours une fraction rationnelle. La suite des longueurs vérifie donc une relation de récurrence linéaire à coefficients constants. La série et la relation de récurrence sont effectivement calculables.

Le fait que la série reste rationnelle peut être exploité pour montrer que certains langages ne sont pas rationnels. Par exemple, pour le langage de Dyck sur une paire de parenthèses, le nombre de mots de longueur est le -ième nombre de Catalan, et la série génératrice des nombres de Catalan n'est pas rationnelle.

Automate de Fibonacci.

Soit un automate fini sur un alphabet A reconnaissant un langage donné. Pour simplifier les notations, on suppose que . On note le langage des mots qui sont étiquettes de chemins de à , de sorte que

.

Pour l'exemple de l'automate de Fibonacci, on a . On suppose maintenant que l'automate est déterministe - ou inambigu - et on note

.

C'est donc le nombre de mots de longueur qui sont étiquettes de chemins de à j. Il en résulte que le nombre de mots de longueur du langage est

.

Pour l'exemple de l'automate de Fibonacci, on a . Les nombres sont des coefficients d'une matrice associée naturellement à l’automate . Soit la matrice d'ordre définie par

.

Le nombre est le nombre de transition de à ; on a donc avec les notations précédentes. Pour l'exemple de l'automate de Fibonacci, on a

Il est facile de vérifier que, parce que l’automate est déterministe ou inambigu, les coefficients de la puissance -ième de sont précisément le nombre de mots de longueur entre les états, soit

.

Le nombre de mots de longueur du langage est la somme des coefficients indicés par l'état initial et les états terminaux. Pour l'exemple de l'automate de Fibonacci, on a

et plus généralement

,

est le -ième nombre de Fibonacci. Enfin, comme toute matrice, la matrice vérifie le théorème de Cayley-Hamilton, les suites vérifient toutes la même relation de récurrence. Pour l'exemple de l'automate de Fibonacci, on a , où est la matrice identité.

Autres caractérisations

[modifier | modifier le code]

Les langages rationnels sont aussi :

Généralisation aux monoïdes quelconques

[modifier | modifier le code]

Les parties rationnelles et les parties reconnaissables peuvent être définis dans tout monoïde. La contrepartie est qu'en général, le théorème de Kleene n'y est pas vérifié, c'est-à-dire que toute partie reconnaissable n'est pas nécessairement rationnelle et vice-versa.

Dans un monoïde , l'ensemble des parties rationnelles est défini comme dans le cas de l'ensemble des mots : c'est la plus petite famille, au sens de l'inclusion, de parties de qui contient l'ensemble vide et les singletons, et est stable par toutes les opérations rationnelles. Il est à noter que l'opération étoile revient à prendre le sous-monoïde engendré par la partie: ainsi, est le monoïde engendré par l'élément .

Pour ce qui est des parties reconnaissables, la définition par automates n'est plus appropriée car rien ne permet d'écrire un élément de comme produit d'éléments minimaux (les lettres dans le cas de ). On utilise alors une définition équivalente, et qui peut être généralisée à tous les monoïdes. Une partie de est reconnue par un monoïde s'il existe un morphisme de monoïdes de sur et une partie de tels que . Une partie reconnaissable de est alors une partie reconnue par un monoïde fini.

Cette définition est bien équivalente à la première pour l'ensemble des mots. Si est un langage rationnel, alors est reconnu par son monoïde syntaxique (il suffit de prendre pour la projection canonique et pour l'ensemble des classes d'équivalence incluses dans ). Réciproquement, si est un langage reconnu par un monoïde fini , alors l'automate où:

  • est l'élément neutre de ;
  • est défini pour tout et par:

reconnaît . En effet, par hypothèse, on a , et un mot est accepté si et seulement si , donc si et seulement si appartient à .

Le théorème de Kleene ne s'applique plus dans le cas général de monoïdes quelconques. Ainsi, une partie rationnelle pourra ne pas être reconnaissable et vice-versa. Néanmoins, on dispose d'un théorème dû à McKnight, qui recouvre une partie du théorème de Kleene et s'énonce ainsi: toute partie reconnaissable d'un monoïde est rationnelle si et seulement si admet une famille génératrice finie, c'est-à-dire est finiment engendrée.

La théorie débute dans les années 1940[22]. Warren McCulloch et Walter Pitts décrivent, en 1943, le système nerveux en modélisant les neurones par des automates simples. Le logicien Stephen Cole Kleene prouve, en 1951, ce que l'on appelle depuis le théorème de Kleene[23]. En 1956, Edward F. Moore publie son algorithme de minimisation. En 1958, Anil Nerode et John Myhill publient leur caractérisation. En 1959, Michael Rabin et Dana Scott donnent, dans un célèbre article[24], un traitement rigoureux de la théorie des automates[note 5].

Du point de vue pratique, c'est Ken Thompson[note 6] qui implémente les expressions rationnelles dans l'éditeur qed, puis l'éditeur ed sous Unix, et finalement dans grep. Depuis lors, les expressions rationnelles ont été largement utilisées dans les utilitaires tels que lex ainsi que dans les langages de programmation nés sous Unix, tels que expr, awk, Perl, Python… Une bonne partie d'entre eux reposent sur la bibliothèque regex, créée par en:Henry Spencer (en).

Notes et références

[modifier | modifier le code]
  1. a b et c Pour qualifier certains des objets exposés dans cet article les ouvrages en français utilisent l'adjectif "rationnel" mais aussi "régulier". Ces deux adjectifs sont considérés comme équivalents dans l'article. Ainsi, par exemple, les expressions "opération rationnelle" et "opération régulière" sont considérées comme synonymes.
  2. Pour une définition précise des règles de simplification, on peut consulter Sakarovitch (2003).
  3. Par exemple, voir au chapitre suivant la démonstration que certains langages ne sont pas rationnels.
  4. Pour des détails supplémentaires, on peut consulter Sakarovitch (2003). L'énoncé se trouve à la page 117, c'est la Proposition I.3.3.
  5. M. Rabin et D. Scott reçoivent le prix Turing en 1976.
  6. Prix Turing en 1983.

Références

[modifier | modifier le code]
  1. Carton 2008, p. 9-10.
  2. Solnon, p. 15-24.
  3. Carton 2008, p. 12.
  4. a et b Solnon, p. 22-23.
  5. Masseron 2002, p. 45-47.
  6. Carton 2008, p. 30.
  7. Carton 2008, p. 32.
  8. Dejean et Schützenberger (1966).
  9. Kirsten 2005.
  10. voir par exemple Hopcroft et Ullman 1979 ou Carton (2008) ou Sakarovitch (2003).
  11. a et b Carton 2008, p. 47.
  12. Madore 2023, p. 28-32.
  13. Petazzoni, Bruno, Seize problèmes d'informatique, p. 73.
  14. Hopcroft et Ullman 1979, p. 40.
  15. a b et c Carton 2008, p. 48-50.
  16. Carton 2008, p. 30;40.
  17. Madore 2023, p. 58.
  18. (en) J. Richard Büchi, « Weak Second-Order Arithmetic and Finite Automata », Mathematical Logic Quarterly, vol. 6, nos 1-6,‎ , p. 66–92 (ISSN 1521-3870, DOI 10.1002/malq.19600060105, lire en ligne, consulté le ).
  19. Calvin C. Elgot, « Decision Problems of Finite Automata Design and Related Arithmetics », Transactions of the American Mathematical Society, vol. 98, no 1,‎ , p. 21–51 (DOI 10.2307/1993511, lire en ligne, consulté le ).
  20. Boris A. Trakhtenbrot, « Finite automata and the logic of monadic predicates », Dokl. Akad Nauk SSSR 140,‎ , p. 326-329.
  21. (en) Mark Weyer, Automata Logics, and Infinite Games, Springer, Berlin, Heidelberg, coll. « Lecture Notes in Computer Science », (ISBN 3-540-36387-4, DOI 10.1007/3-540-36387-4_12, lire en ligne), p. 207–230, Theorem 12.26.
  22. Perrin 1995.
  23. Kleene 1951, p. 46-80.
  24. Rabin et Scott (1959).

Bibliographie

[modifier | modifier le code]

En français

[modifier | modifier le code]
  • Olivier Carton, Langages formels, Calculabilité et Complexité (Cours pour l'école normale supérieure), Paris, , 217 p. (lire en ligne [PDF]). Ouvrage utilisé pour la rédaction de l'article
  • David A. Madore, Théorie des langages : Notes de cours, Palaiseau, Télécom Paristech, , 106 p. (lire en ligne [PDF]). Ouvrage utilisé pour la rédaction de l'article
  • Marcel Masseron, Théorie des langages (Cours de maîtrise d'informatique), Paris, Université Paris Nord Institut Galilée, , 178 p. (lire en ligne [PDF]). Ouvrage utilisé pour la rédaction de l'article
  • Dominique Perrin, « Les débuts de la théorie des automates », Technique et science informatiques, vol. 14, no 4,‎ , p. 409-433 (HAL hal-00793909, lire en ligne [PDF]). Ouvrage utilisé pour la rédaction de l'article
  • Jacques Sakarovitch, Éléments de théorie des automates, Vuibert, , 816 p. (ISBN 978-2-7117-4807-5)
    Traduction anglaise avec corrections: Elements of Automata Theory, Cambridge University Press 2009, (ISBN 9780521844253)
  • Christine Solnon, Théorie des langages (Cours), Lyon, LIRIS, 30 p. (lire en ligne [PDF]). Ouvrage utilisé pour la rédaction de l'article