Dérivée de Brzozowski

En Informatique théorique, et en particulier en théorie des automates finis, la dérivée de Brzozowski est un outil qui permet de construire un automate fini à partir d'une expression rationnelle ou régulière.

Elle tient son nom de l'informaticien Janusz A. Brzozowski qui, dans un article datant de 1964[1], en a étudié ses propriétés et a démontré que l’algorithme de calcul se termine.

Terminologie modifier

La dérivée de Brzozowski s'applique à des expressions rationnelles, en relation avec les notions de langages formels et d'automates finis. On résume ici les définitions de ces notions.

Mots modifier

Un alphabet   est un ensemble quelconque, en général fini. On appelle lettres ses éléments. Un mot sur l'alphabet   est une suite finie de lettres. On appelle mot vide, et on le note  , le mot qui ne comporte aucune lettre.

La concaténation de deux mots   et   est le mot constitué des lettres de   suivies des lettres de  . On le note par simple juxtaposition  .

Langage quotient modifier

Un langage (formel) sur alphabet   est un ensemble de mots sur  .

Pour un langage   sur un alphabet  et un mot   sur  , on appelle langage quotient (aussi langage résiduel ou quotient à gauche) de   par rapport à   l'ensemble des mots   tels que   est un mot de  ; on le note  . Formellement,

 .

Les formules suivantes sont utiles :

  ;  

La notation de langage résiduel est étendue aux parties par

 .

Expressions régulières modifier

Soit   un alphabet fini. Les expressions régulières sur   sont les expressions obtenues par récurrence comme suit :

  1. Les symboles  ,  , et toute lettre   pour   sont de expressions régulières ;
  2. si   et   sont des expressions régulières, alors  ,   (aussi noté  ) et   sont des expressions régulières;
  3. toute expression régulière est obtenue, à partir des expressions atomiques (1), par un nombre fini d'applications des règles de composition (2).

D'autres opérateurs, comme l'intersection ou la négation, sont ajoutées dans les applications aux traitements de textes, ainsi que d'autres extensions qui n'interviennent pas dans le contexte présent.

Langage dénoté par une expression modifier

Les expressions régulières servent à décrire de façon concise un langage formel. En particulier, une expression rationnelle (qui est toujours finie) peut décrire un langage infini. Il est important de distinguer le l'expression et le langage qu'elle dénote, puisque qu'un même langage peut être décrit de multiples manières. C'est à cela que servent les symboles   et  , et la représentation de l’union par le symbole d'addition

Le langage dénoté par une expression   est noté  . Il est défini par récurrence sur la structure de l'expression comme suit:

  1.  ,   (le mot vide),  pour  
  2.  ,  , et  .

Notons qu'une expression régulière ne dénote qu'un seul langage, mais un même langage peut être dénoté par plusieurs expressions régulières différentes. Par exemple, les expressions   et   dénotent le même langage.

Dérivée d'une expression régulière modifier

La dérivée de Brzozowski (ou dérivée tout court) d'une expression régulière est à nouveau une expression régulière. Le langage dénoté par l'expression dérivée est le quotient gauche (aussi appelé langage dérivé parfois) du langage dénoté par l'expression de départ. Les deux opérations de dérivation opèrent donc « en parallèle », l'une sur les expressions, l'autre sur les langages. Autant les expressions peuvent se manipuler par des algorithmes effectifs, autant la manipulation des langages n'est réalisable qu’indirectement, par une de leurs représentations finies.

Des applications concrètes de ces algorithmes ont vu le jour dans le contexte de l'analyse de textes XML[2].

Définition modifier

Les dérivées sont indexées par un mot sur l'alphabet  . Le but est d'obtenir, pour un mot   et une expression  , une nouvelle expression   telle que le langage   soit le langage des mots de   privés du préfixe  . La dérivée par rapport à un mot   est notée  [3]. L'objectif est donc de préserver la relation

 ,

où, comme rappelé ci-dessus, on a  .

  • La dérivée par rapport à une lettre   est définie par :
    1.  ,  ,   pour toute lettre  
    2.  ,   et
     
  • La dérivée par rapport à un mot   est définie par récurrence par la composition des dérivations par :
 ,

avec  . La formule pour le produit peut s'écrire autrement en introduisant une fonction auxiliaire qui teste si le langage dénoté par une expression contient ou non le mot vide. Cette fonction, notée   et appelée le terme constant de l'expression[4], est définie par aussi par récurrence sur l'expression comme suit :

  1.  ,  , pour toute lettre  ,
  2.  ,   et  .

La formule du produit s'écrit alors

 

Le résultat est le même sous réserve d'appliquer les identifications dites triviales, c'est-à-dire de supprimer les occurrences de 0 et de 1 où on peut le faire, en d'autres termes en utilisant les relations

 .

Exemple modifier

Considérons l'expression

 

Sa dérivée, par rapport à la lettre  , est

 

Pour plus de détails, on a gardé longuement les 0 et les 1 dans l'expression.

Propriétés modifier

La propriété première est la formule suivante, valable pour toute expression   et tout mot  :

Propriété — Pour toute expression régulière   et tout mot  , on a : .

Pour un langage rationnel  , la famille de langages  , où   parcourt l’ensemble de tous les mots, est finie. Cela n'implique pas que la famille des expressions   dérivées de   soit finie, car on peut avoir une infinité d'expressions pour le même langage !

Finitude de l'ensemble des dérivées modifier

Un théorème tout à fait remarquable, et qui est le résultat principal de l'article de Brzozowski de 1964, stipule que l'ensemble des dérivées d'une expression est finie sous réserve que l'on applique quelques simplifications aux formules, en plus de la suppression des 0 et 1. Ainsi, les deux expressions   et   sont considérées comme équivalentes (commutativité), de même   (idempotence) et   (associativité).

Théorème (Brzozowski) — L'ensemble des dérivées d'une expression rationnelle est finie modulo l'identification d'expressions par les règles d'associativité, de commutativité, d'idempotence, et les identités faisant intervenir 0 et 1.

L'automate des expressions dérivées modifier

Soit   une expression régulière sur un alphabet  , et soit   l'ensemble de ses expressions dérivées. Cet ensemble — qui est fini par le théorème de Brzozowski — peut être vu comme l’ensemble des états d'un automate déterministe complet qui, de plus, reconnaît le langage  . Pour cela, on définit la fonction de transition, pour un état   et une lettre  , par

 .

Ainsi, si   pour un mot  , alors  . L'état initial de l'automate est l'expression  , les états terminaux sont les expressions   telles que le terme constant est 1.

Cet automate, aussi appelé automate de Brzozowski reconnait le langage  .

Exemple modifier

 
Automate des expressions dérivées, par la méthode de Brzozowski.

Considérons l'expression

 

Notons

 .

L'automate obtenu a quatre états, les états   et   sont terminaux. Il est reproduit ci-contre[5].

Calcul pratique modifier

Le calcul pratique de l'automate à partir de l’expression demande une représentation commode d'expressions rationnelles, comme peuvent le fournir les arbres ou alors des objets que l'on peut définir dans des langages de programmation évolués qui en permettent une manipulation facile. Ces arbres sont normalisés en supprimant les sommets étiquetés par 0 et 1 là où c'est possible, en faisant un choix pour la commutativité qui consiste par exemple à prendre comme premier terme celui qui est le plus petit lexicographiquement, et pour l'associativité de faire un choix analogue ou de représenter les opérandes non pas sous forme de suite, mais sous la forme d'un ensemble[6].

Extension : l'algorithme d'Antimirov modifier

L'automate obtenu par la méthode de Brzozowski décrite ci-dessus est fini, déterministe, complet, mais n'a aucune raison d'être minimal. Il peut donc être victime de l'explosion exponentielle qui le rend impraticable. Une variante de la méthode de Brzozowski remplace la dérivée d'une expression, qui est une somme de termes, par l'ensemble des termes de cette somme. Cette petite modification a pour conséquence que les composants de l’automate se présentent comme des ensembles d'états, chacun présenté par un terme plus petit. La méthode d'Antimirov qui tire profit de cette observation a la propriété d'être non déterministe, mais d'avoir peu d'états (autant que l'automate de Glushkov); de plus, l'identification par les diverses identités de commutation et d'associativité n'est plus nécessaire[7].

Extension de la notion de dérivée modifier

Soit   une expression régulière sur  , et soit   une lettre. La dérivée de   par rapport à  [8] est un ensemble d'expressions régulières, défini récursivement par :

  1.   et   pour  ;
  2.  ,   et  .
  3. De plus,   pour tout mot  .

On identifie ici un ensemble ayant un seul élément avec l'élément qui le compose. Par exemple, pour

 

considéré comme le produit de   par  , on obtient

 .

Construction de l'automate modifier

 
Automate des termes dérivés, par la méthode d'Antimirov.

L'ensemble des termes atomiques obtenus en dérivant   est l'ensemble des termes dérivés de  . Ce sont eux qui servent d'états à l'automate reconnaissant le langage. Le langage dénoté par un ensemble d'expressions rationnelles est par définition l'union des langages dénotés par les expressions. L'intérêt de cette dérivation par rapport à celle de Brzozowski réside dans le fait que l'automate obtenu a au plus   états, où   est la taille de  .

L'automate déduit des termes dérivés a pour états les termes dérivés, et comme plus haut l'expression   pour état initial et chaque expression   telle que  . Les transitions sont les triplets   tels que   est un terme figurant dans  .

Antimirov — L'automate déduit des termes dérivées d'une expression rationnelle   reconnaît le langage dénoté par  , et possède au plus   états.

Exemple modifier

Dans l'exemple ci-dessus, pour  , les termes dérivés sont  ,  et  . L'automate des termes dérivés est :

Notes et références modifier

  1. Brzozowski 1964.
  2. Pour un exposé historique, voir par exemple C. M. Sperberg-McQueen, Applications of Brzozowski derivatives to XML Schema processing, Extreme Markup Languages 2005, Montréal.
  3. On trouve aussi la notation  , par exemple chez Sakarovitch 2003, p. 149.
  4. Notation et terminologie de Sakarovitch 2003, p. 148.
  5. Sakarovitch 2003, p. 153.
  6. Scott Owens, John H. Reppy et Aaron Turon, « Regular-expression derivatives re-examined », J. Functional Programming, vol. 19, no 2,‎ , p. 173-190 (DOI 10.1017/S0956796808007090, lire en ligne).
  7. Sakarovitch 2003, p. 159.
  8. Sakarovitch 2003, p. 159 dit  -dérivée.

Bibliographie modifier

  • Janusz A. Brzozowski, « Derivatives of Regular Expressions », Journal of the ACM, vol. 11,‎ , p. 481–494 (DOI 10.1145/321239.321249).
  • Valentin M. Antimirov, « Partial Derivatives of Regular Expressions and Finite Automaton Constructions », Theor. Comput. Sci, vol. 155, no 2,‎ , p. 291-319
  • Jacques Sakarovitch, Éléments de théorie des automates, Paris, Vuibert, , 816 p. (ISBN 2-7117-4807-3, zbMATH 1188.68177)