Langage algébrique déterministe

En informatique théorique et en théorie des langages, un langage algébrique déterministe est un langage algébrique reconnu (par états finals) par un automate à pile déterministe. L'intérêt des langages déterministes est que leur analyse syntaxique se fait en temps linéaire en la longueur du mot, alors que dans un langage algébrique quelconque, la complexité est cubique, ou en tout cas se ramène à la complexité du produit matriciel, donc est en O(n2,37) où n est la longueur du mot par l'algorithme de Valiant. 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.

Exemples

  • Le langage est déterministe.
  • Le langage , où est une lettre différente de , et où est le retourné de , est déterministe.

Propriétés

La classe des langages algébriques déterministes contient strictement la classe des langages rationnels et est strictement incluse dans celle des langages algébriques, et même des langages algébriques inambigus.

Le contre-exemple type de langage algébrique non déterministe est l'ensemble des palindromes.

La classe des langages algébriques déterministes est close par complémentaire[1]. 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 de la clôture par complémentaire et union) ;
  • elle n'est pas close par concaténation ;
  • elle n'est pas close par miroir, par exemple, est algébrique déterministe mais pas .

Exemples de langages non déterministes

  • Le langage n'est pas déterministe.
  • Le langage n'est pas déterministe sur un alphabet à au moins deux lettres. Ce langage est formé des mots dont la deuxième moitié contient au moins une occurrence de la lettre .
  • Le langage des palindromes n'est pas déterministe[2],[3].

Le principe de construction de ces langages est le même : l'automate à pile doit prendre une décision sans connaître la totalité de la donnée ; dans le premier exemple, il doit anticiper si le nombre de b est égal au ou le double du nombre de a, dans le deuxième exemple, il doit tester la présence de la lettre a dans la deuxième moitié sans savoir s'il est déjà dans la deuxième moitié.

Il existe un lemme d'itération spécial pour les langages algébriques déterministes qui permet de prouver formellement qu'un langage n'est pas déterministe. L'énoncé est assez compliqué[4]. Une variante de ce lemme, tout aussi compliquée, est donnée par Sheng Yu.

Notes et références

  1. Wolper 2006, Section 4.4.4, p. 97.
  2. Harrison 1978, Théorème 11.8.5..
  3. Michael Harrison montre même que ce langage n'est pas la réunion d'un nombre fini de langages déterministes.
  4. Harrison 1978, Théorème 11.8.3.

Bibliographie

  • Portail de l'informatique théorique
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.